.NET-Software-Entwicklung - DotNetNuke - Business-Develoment
# Friday, December 29, 2006

Sicherheitsanalyse von WCF (Windows Communication Foundation) durch das BSI und newtelligence

Wie ich schon in meinem Beitrag über den NRW Sumit 06 geschrieben haben, hat Newtelligence eine Beispielanwendung für die WCF geschrieben. Diese Anwendung wurde im Auftrag des BSI (Bundesamt für Sicherheit in der Informationstechnik) entwickelt und sollte nicht nur ein praxisorientierte Beispielanwendung sondern viel mehr die sichere Nutzung der WCF-Sicherheitsfunktionen zeigen.
Die Empfehlungen umfassen neben den Hinweisen zu WCF-spezifischen Architekturen, zur sicheren Installation, Authentisierung und zur Anbindung von Datenbanken oder der Fehlerbehandlung in verteilten Systemen auch auch den Quellcode der beispielhaften WCF-Anwendung.

Die entwickelten Handlungsempfehlungen sowie die Beispielanwendung kann per E-Mail (security (at) bsi.bund.de) angefordert werden.


Friday, December 29, 2006 11:40:41 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 3.0 | Allgemein | Opensource | Software | WCF
# Sunday, December 17, 2006

iBATIS: Ein Data Mapper framework fuer DotNet / Java

Ohne jetzt große Erfahrungen mit dem System iBATIS gemacht zu haben, kann ich sagen, dass mir die Vorgehensweise sehr gut gefällt! So um 2000 herum habe ich mit einem Kollegen eine ähnliche Datenbankzugriffskomponente entwickelt und sehr gute Erfahrungen damit gesammelt. Gerade das Auslagern der der SQL-Befehle bzw. die Abstrahierung der SQL-Befehle kann Vorteile haben.
Damals haben wir dieses Konzept unter dem Aspekt der Datenbankunabhänigkeit implementiert und eine allgemeine Beschreibung in Form von XML auf die entsprechende Datenbank zur Laufzeit angepasst.

Freut mich doch immer wieder wenn ich Projekte sehe, die ähnliche Methode anwenden.

Mittlerweile bin ich zwar mehr der Freund vom Provider-Pattern aber der Ansatz von iBATIS kann durchaus einen Sinn ergeben! Eine weiter Diskussion erspare ich mir an dieser Stelle :)

Ach so, hier gibt es noch den Link.

Nur so am Rande: MySpace.com benutzt nicht nur ASP.NET 2.0 sondern auch iBATIS .. guckst Du hier!


Sunday, December 17, 2006 12:40:17 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | Allgemein | Datenbank | Opensource | XML
# Friday, December 15, 2006

Performanceoptimierung von DotNetNuke / DNN

Das DotNetNuke mittlerweile einen sehr großen und brauchbaren Funktionsumfang hat muss an dieser Stelle nicht weiter erwähnt werden. Bei der Implementierung alle dieser Features stand aber leider der Punkt Geschwindigkeit (Performance) nie im Mittelpunkt. Das soll nun endlich mit der kommenden Version 4.4.0 verändert werden!

Durch folgende Maßnahmen soll die Geschwindigkeit verbessert werden:

(1) Code Refactoring

(2) Optimierung und verbesserte Einsatz des Caching

(3) Assembly Management

(4) Database

(5) Compression

(6) Page State

Wer genauer wissen möchte was sich hinter den einzelnen Punkten versteckt kann das im Blogeintrag von Charles Nurse hier nachlesen.

Die Ergebnisse der ersten Tests kann man hier nachlesen!

Auf die Version 4.4.0 dürfen wir also alle sehr gespannt sein :)


Friday, December 15, 2006 2:45:17 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 2.0 | ASP.NET | DotNetNuke | Opensource

Microsofts Ajax (Atlas) steht als RC zum Download bereit

Auch wenn ich bis jetzt das Thema Ajax hier wohl mehr stiefmütterlich behandelt habe, habe ich dieses immer im Fokus. Das von Microsoft entwickelte Ajax-Framework steht nun als RC zur Verfügung und kann hier runtergeladen weden.

Jetzt kann man also über einen ernsthaften Einsatz nachdenken und ich werde das Thema nun endlich angehen.


Friday, December 15, 2006 2:25:02 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 2.0 | ASP.NET | XML
# Wednesday, December 06, 2006

Happy Birthday www.dnnportal.de (die dotnetnuke community)

Gestern ist es mir doch wirklich entgangen :( die Seite www.dnnportal.de wurde gestern zwei Jahre alt und geht nun in die dritte Runde. In dem Forum dieser Seite findet man mittlerweile jede Menge Tips&Tricks rund um DotNetNuke und immer wieder Hilfe von Experten aus dem deutschen Raum :d

 


Wednesday, December 06, 2006 1:10:38 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
Allgemein | DotNetNuke | Opensource
# Monday, December 04, 2006

DotNetNuke und entfernen von Profilproperties

Für einen Bekannten habe ich eine DotNetNukeinstallation (4.3.6) aufgesetzt und ihn ein wenig damit spielen lassen. Dabei hat er sich auch ein wenig mit den Profileigenschaften eines Users beschäftigt und diese Modifiziert. Das finde ich doch schon sehr gut und hätte ich mir eigentlich von Anfang an gewünscht ..

Da sein Portal lediglich den deutschsprachigen Raum anspricht hat er einfach die Eigenschaft TimeZone gelöscht. Leider findet das DotNetNuke gar nicht witzig und normale Anwender konnten sich ab diesem Zeitpunkt nicht mehr anmelden. Einige Komponenten benötigen diese Profileigenschaft und es kracht ganz schön böse, falls diese nicht im Profil enthalten ist.

Also: Vorsicht beim Löschen von Profileigenschaften - lieber ausblenden:)


Monday, December 04, 2006 3:20:32 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 2.0 | ASP.NET | DotNetNuke | Opensource
# Wednesday, November 29, 2006

Visual Studio 2003 und Windows Vista / Mein Tag

Schon länger wollte ich mein Notebook mal mit Windows Vista ausstatten doch irgendwie fehlte mir die Zeit. Nachdem dann letzte Nacht mein Notebook softwaretechnisch zu Bode ging, habe ich mich direkt entschlossen Windows Vista zu installieren. Im guten Glauben gesagt, getan und dachte alles wäre gut! Doch weit gefehlt... der erste Eindruck ist echt gut (ein wenig gewöhnungsbedürftig aber ich würde sagen: nicht schlecht)....

Dann habe ich meine Visual Studio 2003 installiert,  was kein Problem war, nur das Starten war mir nicht vergönnt. Was soll das denn ???? 

Eigentlich bin ich davon ausgegangen, dass Microsoft die meist verwendeten Anwendungen (Visual Studio 2003 / MS-SQL Server 2000, usw) unterstützt ... diese Hoffnung ist aber gerade wie eine Seifenblase geplatzt!
Normalerweise bin ich nicht contra-microsoft aber das ist ja wohl komplett am Thema vorbei!

Sogar Visual Studio 2005 läuft nur nach einem ServicePack - und selbst dann gibt es wohl noch ein paar Probleme (mehr als unter XP). Super, toller Start in ein neues Betriebssystemzeitalter.... jetzt geht es wieder zum good, old Windowx XP - bis all meine Anwendung und Tools unter .NET 2.0 (3.0) laufen.

An dieser Stelle sage ich : Vielen Dank für nichts!

P.S.: Vielleicht hätten wir alle bei VB 6 bleiben sollen, denn das wird unter Vista supportet *mahlzeit*


Wednesday, November 29, 2006 7:00:26 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 2.0 | Allgemein | Software
# Thursday, November 23, 2006

Sind wir nicht alle ein wenig Star Trek?

Für alle Leute die Fan von Star Trek sind habe ich gerade eine ziemlich coole Seite mit jede Menge Stuff entdeckt:

http://www.lcarscom.net

Da gibt es Sounds für die (Windows) Systemklänge, Screensaver, Fotos von Raumschiffen und deren Crew, etc.

Viel Spaß!


Thursday, November 23, 2006 12:02:40 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
Allgemein
# Friday, November 17, 2006

DotNetNuke 3.3.6 / 4.3.6 steht zum Download bereit

Seit gestern gibt es die aktuelle Version von DotNetNuke auf der offiziellen Downloadseite zur Verfügung. Neben einigen Fehlern, Sicherheitslücken und Peformanceoptimierung wurde auch mal die Datensyncronisation verbessert. Genaue Informationen gibt es wie immer hier.

Die Deutsche Übersetzung findet man bei http://www.deutschnetnuke.de/


Friday, November 17, 2006 1:01:40 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 2.0 | ASP.NET | DotNetNuke | Opensource
# Thursday, November 09, 2006

OpenSource Web-Design

Den Begriff OpenSource kennt man ja schon recht genau im Bereich der Software. Jetzt gibt es aber auch eine Seite die "OpenSource" Web-Designs anbietet (also quasi Templates für lau :) )

Bei meinem ersten Überflug ist die Seite es auf jeden Fall wert hier kurz erwähnt zu werden... also:

http://www.oswd.org

Vielleicht finde ich da ja auch mal endlich eine schönes neues Desgin für dieses Blog hier :)


Thursday, November 09, 2006 2:23:43 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
Allgemein | Opensource

MenuPilot: Open source context menu ASP.NET

Ein sehr schönes Context-Menü für ASP.net 2.0 habe ich soeben hier entdeckt. Dabei wird die Smart-Tag-Technologie (bekannt z.B. aus dem VS.NET 2005) verwendet.

Ebenso gibt es unter http://www.daypilot.org/ einen Klasse ASP.NET Kalender im Look & Feel von Outlook 2003  .. 


Thursday, November 09, 2006 2:07:33 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET 2.0 | ASP.NET | Controls | Opensource
# Wednesday, November 08, 2006

Endlich neuer IE / .NET Framework 3.0 ready to download

Vermutlich ist es kein großes Geheimnis mehr aber trotzdem verbreite ich die Neuigkeit auch mal:
Microsoft hat den Internet Explorer 7.0 zum Download frei gegeben.

Der neue IE ist nicht nur ein Featureupdate sondern laut Aussage von Microsoft ein von Grund auf komplettes Redesign.  Besonders die Punkte Bedienbarkeit und Sicherheit standen im Vordergrund der Entwicklung.

Hier gibt es den neuen Browser:Download

 

Endlich ist es da: Das .NET Framework 3.0 inkl. der passenden SDK's und den passenden Erweiterungen für das Visualstudio 2005.

Ein paar Informationen zum .NET Framework und der Installation gibt es hier.

Hier die Downloadlinks für die einzelnen Downloads:

net 3.0 runtime -> http://www.microsoft.com/downloads/details.aspx?FamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=en

sdk -> http://www.microsoft.com/downloads/info.aspx?na=40&p=3&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74726

visual studio extensions for WF -> http://www.microsoft.com/downloads/info.aspx?na=40&p=4&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74727

visual studio extensions for WCF, WPF (noch CTP !1) -> http://www.microsoft.com/downloads/info.aspx?na=40&p=2&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74725


Wednesday, November 08, 2006 10:20:36 AM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | .NET 3.0 | Allgemein | Software | WCF
# Thursday, November 02, 2006

Remote Desktop auf einen anderen Port laufen lassen

Gerade habe ich einen interessanten Artikel / Blogeintrag gefunden der beschreibt wie man eine Remote Desktop Verbindung über einen beliebigen TCP-Port laufen lassen kann. Verwendung findet so etwas z.B. wenn an mehrere VM betreibt, Hackern es schwerer machen möchte per Remote Desktop auf einen Server zuzugreifen (okay, da gibt es auch noch deutlich besser Möglichkeiten ;-)).

Der Trick ist eigentlich realtiv Simple:
In der Registry muss lediglich ein Wert verändert weden:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp

Dort gibt es den Key "PortNumber" den man auf einen anderen Wert setzen kann.

Bei der Verbindung muss dann lediglich der veränderte Port hinter dem Computernamen/IP-Adresse angegeben werden:

z.B.: MeinServer:3829

Weiter Infos und ein Tool dafür gibt es hier.

 


Thursday, November 02, 2006 7:12:01 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
Allgemein | Opensource | Software
# Monday, October 30, 2006

SqlException: Konflikt der Sortierung fur die equal to-Operation

"Konflikt der Sortierung für die equal to-Operation kann nicht aufgeloest werden."

Was will der von mir???? ;-) Nach dem Umzug einer DotNetNuke - Site auf eine anderen Server bekam ich plötzlich im Log Viewer die Fehlermedlung

DotNetNuke.Services.Exceptions.ModuleLoadException: Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst werden. ---> System.Data.SqlClient.SqlException: Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst werden. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, String commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, String spName, Object[] parameterValues) at DotNetNuke.Services.Log.EventLog.DBLoggingProvider.Data.SqlDataProvider.GetLog(Int32 PageSize, Int32 PageIndex) at DotNetNuke.Services.Log.EventLog.DBLoggingProvider.DBLoggingProvider.GetLog(Int32 PageSize, Int32 PageIndex, Int32& TotalRecords) at DotNetNuke.Services.Log.EventLog.LogController.GetLog(Int32 PageSize, Int32 PageIndex, Int32& TotalRecords) at DotNetNuke.Modules.Admin.Log.LogViewer.BindData() at DotNetNuke.Modules.Admin.Log.LogViewer.Page_Load(Object sender, EventArgs e) --- Ende der internen Ausnahmestapelüberwachung ---

Nach ein wenig Forschung war die Lösung schnell gefunden. Die SP muss ein wenig verändert werden, damit der Fehler nicht mehr auftritt.

Die Stored Procedure "GetEventLog" muss von

    CREATE TABLE #PageIndex
    (
        IndexID        int IDENTITY (1, 1) NOT NULL,
        LogGUID    varchar(36)
    )

auf

    CREATE TABLE #PageIndex
    (
        IndexID        int IDENTITY (1, 1) NOT NULL,
        LogGUID    varchar(36) COLLATE database_default
    )

geändert werden. Dann ist wieder alles im Lot!


Monday, October 30, 2006 2:11:41 PM (W. Europe Standard Time, UTC+01:00)  #    - Trackback
.NET | ASP.NET | DotNetNuke
# Friday, October 06, 2006

Ein CSS Menu fuer DotNetNuke 3.x / ASP.NET

Ich möchte jetzt hier gar keine Diskussion lostretten die über das Solpart-Menu herzieht. Fakt ist auf jeden Fall:

  • Das Anpassen des Menü via CSS kann einem wirklich graue Haare bereiten
  • Die Größe des Menü (bezogen auf die HTML Datei) ist sehr groß
  • Die Suchmaschinenfreundlichkeit ist fast nicht gegeben

Aus diesen Gründen habe ich ein kleines niedliches CSS-Menu gebaut das mit HTML Aufzählungen, CSS und wirklichen Links (!) arbeitet.

Es ist noch kein perfektes Menu aber für meine derzeitigen Einsatzbereich wirklich ausreichend. Ein paar Erweiterungen und Optimierungen müssen da in Zukunft noch implementiert werden. Aber wie bei jedem Projekt gibt es auch hier mal eine Version 1.0.

Da ich sehr gerne und eigentlich fast alle DotNetNuke Module in C# entwickel ist auch dieses Modul ist c# geschrieben.

Die Einbindung in ein Skin ist relativ simple! Einfach folgendes in das Skin aufnehmen:

<%@ Register TagPrefix="gwc" Namespace="GaliNeo.Modules.Framework" Assembly="GaliNeoMenu" %>

und dann an der Stelle wo das Menü erscheinen soll:

<gwc:GaliNeoMenu runat="server" id="TestMenu"></gwc:GaliNeoMenu>

Natürlich läst sich damit so ziemlich jede Menü darstellen das sich mit den HTML Tags UL und CSS formatieren läßt. Hier ist es zunächst ein klassisches Drop-Down Menü....

Hier der Download des Source-Codes:GaliNeo.DotNetNukeMenu (1.0.0.0).zip (7,96 KB)


Friday, October 06, 2006 12:22:40 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | Allgemein | ASP.NET | Controls | DotNetNuke | Opensource
# Thursday, October 05, 2006

Ein DotNetNuke Skin ohne Table-Tags rein auf DIV/CSS basierend

Ja ja ... i know. Wochenlang habe ich mein Blog vernachläßigt und jetzt jagt ein Beitrag den anderen ;-) Aber irgendwie habe ich mir heute ein wenig Zeit genommen um durch das www zu surfen.

Hier ist noch eine Seite, die man keinen DNN Skin Designe vorenthalten sollte:

http://www.xhtmlskins.com/

Auf dieser Seite geht es um die Erstellung von DotNetNuke Skins ohne Tabellen. Total sexy :)


Thursday, October 05, 2006 1:15:30 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | ASP.NET | DotNetNuke
# Wednesday, October 04, 2006

Blogupdate auf die aktuellste Version

So, endlich habe ich heute mal etwas Zeit gefunden um mein Blog auf die aktuellste Version von dasBlog.net zu aktualisieren.

Die Anpassung an ein anderes Design hat zwar noch nicht so ganz funktioniert aber ich werde die Tage noch mal daran arbeiten.
Bis jetzt läuft die Version  1.9.6264.0 sehr zufriedenstellend und auch das eigentliche Update der Blogsoftware stelle kein Problem dar.

Sollte es doch irgendwelche Probleme geben, dann sagt mir doch bitte bescheid ;-)


Wednesday, October 04, 2006 11:56:01 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
Allgemein

Generierung von Barcode on the fly

Hier ein paar Blogbeträge zum Thema Barcodes und wie man diese unter DotNet erzeugen kann ohne 3rd-party Komponenten:


Wednesday, October 04, 2006 3:47:15 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | .NET 2.0 | Allgemein | ASP.NET | Software
# Thursday, September 28, 2006

Posting Form Data with c#

Letztes Jahr habe ich folgenden Blog-Eintrag verfasst. Darum ging es, wie man ein HTML-Form innerhalb von .NET simulieren kann.

Jetzt ist mir gerade aufgefallen, dass der Sourcecode der ausführenden Klasse dafür fehlt. Natürlich ist das der spannende und entscheidene Part für das Post der HTML-Form. Das möchte ich natürlich nicht so stehen lassen und hier kommt der fehlende Part!

using System;
using System.Net;
using System.Web;
using System.IO;
using System.Text ;

namespace GaliNeo.Framework
{
    public class RemotePost
    {
        #region Private Members
        private System.Collections.Specialized.NameValueCollection Inputs = null ;
        private string _sUrl = "" ;

        #endregion
        
        public RemotePost()
        {
            //
            // TODO: Fügen Sie hier die Konstruktorlogik hinzu
            //
            Inputs = new System.Collections.Specialized.NameValueCollection() ;
        }

        #region Public Methods

        public void Add(string sName, double dValue)
        {
            this.Add(sName, dValue.ToString()) ;
        }

        public void Add(string sName,int iValue)
        {
            this.Add(sName, iValue.ToString() ) ;
        }
        
        public void Add(string sName,string sValue)
        {
            Inputs.Add(sName,sValue) ;
        }

        public string Url
        {
            get { return _sUrl ; }
            set { _sUrl = value ; }
        }
        
        public string Send()
        {
            string sPostData = "" ;

            Uri sUri = new Uri(this.Url) ;
        
            //Wird für evtl. SSL - Verbindungen benötigt
            System.Net.ServicePointManager.CertificatePolicy = new trustedCertificatePolicy();

            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUri);

            //User-Agent
            request.UserAgent = "GaliNeo OnlineStore" ;

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            
            //Zusammensetzen der Daten für die Übermittlung
            sPostData = GetContentToPost() ;
            
            request.ContentLength = sPostData.Length ;            

            Stream writeStream = request.GetRequestStream();
            
            //Encoding im UTF-8 Format um kompatible zu sein
            //UTF8Encoding encoding = new UTF8Encoding(); //UFT-8 funktioniert unter ASP.NET nicht :(
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding() ;            
            byte[] bytes = encoding.GetBytes(sPostData);
            writeStream.Write(bytes, 0, bytes.Length);
            writeStream.Close();

            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            
            //Überprüft den HTTP-Statuscode
            if (response.StatusCode != HttpStatusCode.OK)
            {
                return "N,-1, HTTPStatuscode:" +response.StatusCode.ToString() ;
            }

            Stream responseStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8);
            return readStream.ReadToEnd();
        
        }


        public string GetContentToPost()
        {
            string sReturn = "" ;

            for(int i=0; i< Inputs.Keys.Count;i++)
            {
                if (sReturn.Length == 0)
                {
                    sReturn = Inputs.Keys[i] + "=" + Inputs[Inputs.Keys[i]] ;
                }
                else
                {
                    sReturn += "&" + Inputs.Keys[i] + "=" + Inputs[Inputs.Keys[i]] ;
                }//    if (sPostData.Length == 0)

            }//for(int i=0; i< Inputs.Keys.Count;i++)

            return sReturn ;

        }

        #endregion

    }
}


Thursday, September 28, 2006 3:46:55 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | ASP.NET | DotNetNuke
# Saturday, September 09, 2006

HTML-Mails mit Bildern unter .Net erzeugen und versenden

Wer schon mal HTML-E-Mails verschickt hat kommt wohl kaum um das Problem herum, dass man auch Bilder dieser E-Mail hinzufügen möchte. Der erste und einfachste Weg ist, diese einfach auf einem Server abzulegen und dann auf diesen zu verweisen. Was ist aber wenn der Anwender keine Internetverbindung hat, der Server bzw. das Bild nicht mehr erreichbar ist? Dann sehen diese E-Mails meist sehr unschön aus.

Gerade habe ich einen netten Artikel gefunden, der Beschreibt, wie man ein Bild als E-Mailanhang mitschickt und wie man die Verbindung zwischen Bild und Anhang herstellen kann.

Hier einmal die Kurzfassung:

<IMG height=68 src="cid:015024716@24012006-255A" width=140 align=top border=0>

Die Sourceanweisung mit dem Wert "cid:015024716@24012006-255A" ist hier das interessante. Die RFC-Spezi. besagt das jeder E-Mailanhang eine eindeutige Id bekommt.

Der benötigte Sourcecode zum Versand der E-Mail:

'Zu erst mal die Imports die benötigt werden
Imports System.Net.Mail
Imports System.Net.Mime

Public Sub SendMail()

Dim objMail As New MailMessage
Dim objSender As New MailAddress("absender@server.de")
Dim objSmtpClient As New SmtpClient("smtp.server.de:8881")
Dim objEmpfaenger As New MailAddress("empfaenger@server.de")

objMail.To.Add(objEmpfaenger)
objMail.From = objSender
objMail.Subject = "Betreff der Mail"

'Damit das ganze auch funktioniert muss man angeben,
'das man die Mail im HTML-Format verschicken möchte
objMail.IsBodyHtml = True

'So jetzt zum spannenden Teil, das Bild als Attachment anfügen
Dim objFootImage As New Attachment(Server.MapPath("LOGO.gif"), _
MediaTypeNames.Image.Gif)
objFootImage.ContentId = "01"
objFootImage.ContentDisposition.Inline = True
objFootImage.TransferEncoding = TransferEncoding.Base64
objMail.Attachments.Add(objFootImage)

'Und so wird es anschließend verwendet
objMail.Body = "<img src=""cid:01"" border=0 height=68 width=140>"

'Jetzt nurnoch die Mail verschicken und fertig
objSmtpClient.Send(objMail)
End Sub

Eine ausführliche Erklärung des ganzen gibt es auf dieser Seite


Saturday, September 09, 2006 6:41:56 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | .NET 2.0 | Controls | Opensource