2009-03-23 4 views
2

Im Moment verwenden wir MAPI, um eine reine Text-E-Mail von unserer Anwendung zu senden. Wir geben das Dialog-Flag an, wenn der Benutzer diese Funktion aufruft, so dass die E-Mail in ihrem E-Mail-Client erscheint und sie dann modifizieren und senden kann.E-Mail im HTML-Format senden

Wir möchten die E-Mail verschönern und in einem HTML-Format senden.
Nach diesem Link MSDN Link MAPI diesen http://support.microsoft.com/kb/268440

Ich habe einen Artikel über ExpertsExchange nicht ist sutiable gesehen, dass Sie sagen, MAPI, es tun können, aber ich kann das Beispiel mit Outlook nicht an der Arbeit (nicht versucht anotherother Klient noch)

procedure ShowMailDlg(ToName,Address,HTMLMessage: string); 
var 
    li: integer; 
    lMessage: TMapiMessage; 
    lRecipArray: array of TMapiRecipDesc; 
    lREs: DWord; 
begin 
    SetLength(lRecipArray,1); 
    lRecipArray[0].ulRecipClass:=MAPI_TO; 
    lRecipArray[0].lpszName:=pChar(ToName); 
    lRecipArray[0].lpszAddress:=pChar(Address); 
    lMessage.ulReserved:=0; 
    lMessage.lpszSubject:=nil; 
    lMessage.lpszNoteText:=pChar(HTMLMessage); 
    lMessage.lpszMessageType:= nil;//pChar('HTML'); 
    lMessage.lpszDateReceived:=nil; 
    lMessage.lpszConversationID:=nil; 
    lMessage.flFlags:=0; 
    lMessage.lpOriginator:=nil; 
    lMessage.nRecipCount:=length(lRecipArray); 
    lMessage.lpRecips:=PMapiRecipDesc(lRecipArray); 
    lMessage.nFileCount:=0; 
    lMessage.lpFiles:=PMapiFileDesc(nil); 
    lRes:=MapiSendMail(0, 0 , lMessage,MAPI_DIALOG, 0); 
end; 

Jeder hat irgendwelche Ideen, wie ich das tun kann. Ich könnte wahrscheinlich Outlook automatisieren, aber ich mag es behalten ziemlich unabhängig von E-Mail-Client (also MAPI)

Dank

Update: Dank für die Anregungen für jedermann. Die Funktion wird nicht so häufig verwendet, daher ist es nicht wirklich eine Option, den Benutzer zur Konfiguration von SMTP-Details aufzufordern. Ich denke, wir bleiben einfach bei der reinen Text-E-Mail.

Dank

Antwort

4

MAPI unterstützt HTML formatierte Nachrichten nicht. Von Microsoft: "MAPI (Extended Messaging Application Programming Interface) sollte nicht zum Generieren von HTML-formatierten Nachrichten verwendet werden. Alternativ können Sie das Microsoft Outlook-Objektmodell, CDONTS, CDOSYS, CDOEX oder ein SMTP-Steuerelement eines Drittanbieters verwenden."

Ich würde die Kommentare über das Senden über Indy Echo. Ich veröffentlichte eine Einheit, die HTML-Nachrichten mit Indy sehr einfach senden kann here oder fühlen Sie sich frei, Ihre eigenen zu schreiben. Wenn Sie die Nachrichten wirklich editierbar machen möchten, versuchen Sie eine Kombination aus WPTools und Indy. WPTools bietet eine gute Unterstützung für HTML-Markup und Sie können die resultierende Nachricht dann über Indy senden.

Ich habe keine Erfahrung mit Synapse, also kann ich nicht sagen, wie einfach/schwer es mit diesem Projekt ist.

2

Dies ist auch möglich, mit Hilfe der Synapse Bibliothek. Ein spezifisches Beispiel ist auf der Howto-Seite mit dem Titel "About MIME and its MIME Parts" verfügbar. Ich habe diese Technik in verschiedenen Programmen verwendet, um HTML-E-Mails zu versenden.

Leider funktioniert dies nicht über MAPI, Sie müssen die SMTP- oder IMAP-Informationen der Benutzer abrufen und diese Kommunikation selbst durchführen (die Synapse-Bibliothek verfügt über entsprechende Routinen).

Wenn Sie sich entscheiden, Synapse herunterzuladen, empfehle ich dringend, die neueste Version aus dem Subversion-Repository zu bekommen. Das dort verfügbare Update enthält Unterstützung für Delphi 2009.

3

Wenn Sie nur Outlook-Clients dienen könnten Sie versuchen, Outlook von OLE Zugriff:

procedure SendMail(const aRecipient, aSubject, aNote, aFile: string; Silent, HTML: boolean); 
const 
    olMailItem = 0; 
var 
    ii: integer; 
    MyOutlook, MyMail: variant; 
begin 
    //*** Send something via OLE/Outlook... 

    //*** Outlook- und Mail-Objekt erstellen... 
    MyOutlook := CreateOLEObject('Outlook.Application'); 
    MyMail := MyOutlook.CreateItem(olMailItem); 

    //*** create a mail message... 
    MyMail.To  := aRecipient; 
    MyMail.Subject := aSubject; 

    if aNote <> '' then begin 
    if HTML then 
     MyMail.HTMLBody := aNote 
    else begin 
     MyMail.Body  := aNote; 
    end; 
    end; 

    //*** Add Attachment... 
    if aFile <> '' then begin 
    MyMail.Attachments.Add(aFile); 
    end; 

    if Silent then 
    MyMail.Send 
    else 
    MyMail.Display; 

    MyOutlook := UnAssigned; 
end; 
2

Delphi E-Mail würde ich empfehlen SakEmail
http://groups.yahoo.com/group/sakemail/
Wenn Sie eine Version von delphi verwenden höher dann 7,
sollten Sie die Versionsdefinition der INC-Datei hinzufügen.
das mit SakEmail geliefert wird, sonst fällt es auf
Delphi4 Kompatibilitätsmodus. Nach dem Patchen der INC-Datei scheint es
gut mit Delphi 2005.

auch scheint es HTML über MAPI funktioniert in Thunderbird, aber kein anderer Client.

0

Sie sollten in Erwägung ziehen, eine SMTP-Komponente, z. B. Indy, zu verwenden und den Benutzer hinzuzufügen, der das Senden an das CC- oder BCC-Feld der Nachricht vornimmt. Dies erfüllt weitgehend die Notwendigkeit, solche gesendeten Nachrichten in dem eigenen Mail-Client des Benutzers erscheinen zu lassen, was der Hauptvorteil von MAPI ist. Der Benutzer kann sogar ein separates Konto speziell für den Empfang solcher Kopien einrichten.

Auf diese Weise können Sie jedes Detail im Zusammenhang mit dem Senden von E-Mails vollständig anpassen (MHTML ist ein solches Beispiel), einschließlich der Zwischenspeicherung aller E-Mails und Senden in einem separaten Thread oder zu einem anderen Zeitpunkt. Außerdem ist diese Methode Client-agnostischer als selbst MAPI; Dies funktioniert beispielsweise auch dann, wenn der Benutzer webbasierte E-Mails wie Google Mail verwendet.

0

Es ist ein nicht dokumentiertes Merkmal MAPISendMail für die Aufnahme eines HTML-Körpers:

  • gesetzt lpszNoteText zu nil (oder ein Zeiger auf einen leeren Zeichenfolge)
  • einen HTML-Anhang hinzuzufügen

MAPI verwendet den HTML-Anhang als Hauptteil der E-Mail (und nicht den Anhang).