2011-07-20 28 views
7

我目前有一個應用程序生成PDF憑單和電子郵件給他們的觀點收件人。然而,我使用的功能是客戶端依賴(MS Outlook),我真的希望使這個電子郵件客戶端不可知論,因爲我們有很多客戶,並不是所有人都使用Outlook。發送附件的電子郵件客戶端不可知論者

我已經看過了幾個選項,但真的不能找到在查找什麼,似乎解決我的問題。

有誰知道發送使用客戶SMTP連接電子郵件,無論客戶端發送一個與它的固定,而不會直接調用客戶端做一個好辦法嗎?

回答

5

或者你可以使用Synapse庫,使用SMTP發送郵件,最好是在其newest snapshot

這裏是應該從[email protected]附帶c:\voucher.pdf文件發送郵件到[email protected]smtp.server.com與登錄login和密碼password代碼。關於TMimeMess課程的其餘功能,我會直接參考the reference

我希望這會工作,因爲我已經簡化和本地化我使用更復雜的代碼,我不能確認,也沒有編制。如果不是,讓我們downvote吧:)

uses 
    SMTPSend, MIMEPart, MIMEMess; 

procedure TForm.SendEmailClick(Sender: TObject); 
var 
    MIMEText: TStrings; 
    MIMEPart: TMimePart; 
    MIMEMessage: TMimeMess; 
begin 
    MIMEText := TStringList.Create; 
    MIMEText.Add('Hello,'); 
    MIMEText.Add('here is the text of your e-mail message,'); 
    MIMEText.Add('if you want the HTML format, use AddPartHTML'); 
    MIMEText.Add('or e.g. AddPartHTMLFromFile if you have your'); 
    MIMEText.Add('HTML message content in a file.'); 

    MIMEMessage := TMimeMess.Create; 

    with MIMEMessage do 
    try 
    Header.Date := Now; 
    Header.From := '[email protected]'; 
    Header.ToList.Clear; 
    Header.ToList.Add('[email protected]'); 
    Header.CcList.Clear; 
    Header.Subject := 'E-mail subject'; 
    Header.XMailer := 'My mail client name'; 

    MIMEPart := AddPartMultipart('mixed', nil); 

    AddPartText(MIMEText, MIMEPart); 
    AddPartBinaryFromFile('c:\voucher.pdf', MIMEPart); 

    EncodeMessage; 

    if SendToRaw(Header.From,    // e-mail sender 
       Header.ToList.CommaText, // comma delimited recipient list 
       'smtp.server.com',   // SMTP server 
       Lines,      // MIME message data 
       'login',     // server authentication 
       'password')    // server authentication 
    then 
     ShowMessage('E-mail has been successfuly sent :)') 
    else 
     ShowMessage('E-mail sending failed :('); 
    finally 
    Free; 
    MIMEText.Free; 
    end; 
end; 


更新:

Downvoter step into the light(人漂亮評論,改變你的暱稱,請,它的不冷靜了:),會很糟糕如果您將所有收件人的列表發送給每個人。使用突觸you cannot將BCC添加到消息標題; MIMEMessage中沒有Header.BCCList屬性。 相反,您可以在發送數據之前直接修改數據。

// First, you will remove the line where you are adding a recipient to the list 
Header.ToList.Add('[email protected]'); 

// the rest between you can keep as it is and after the message encoding 
EncodeMessage; 

// and before sending the mail you'll insert the line with BCCs 
Lines.Insert(1, 'Bcc: [email protected], [email protected]'); 

if SendToRaw ... 
+0

我要給這條路線一個鏡頭。 cc不會是一個問題。該應用程序只向一個收件人發送優惠券。該計劃生成10-15個不同的代金券並通過電子郵件發送給我們的客戶客戶。整個過程中一個收件人。目前使用Outlook的實現像一個魅力,但據說並非所有人都在使用Outlook。 – JamesW

1

你可以使用​​爲您的SMTP客戶端,獨立於系統默認的電子郵件客戶端。下面是發送郵件不帶附件的基本demo,並有詳細的文章herehere有關發送HTML或純文本電子郵件和帶或不帶附件。

+0

但是,這不會與用戶的電子郵件客戶端集成(即他不能跟蹤發送的電子郵件)。不是一個簡單的設計決定! –

+2

@Leonardo當然,它不會整合。如果這是一個要求,你可以嘗試MAPI--在[JCL](http://sourceforge.net/projects/jcl/)中有'JclMapi',但是再次,並非所有的電子郵件客戶端都能正確支持它。 –

+4

@Leonardo:James要求SMTP,這是一個協議,而不是一個程序。 Indy有一個'TIdSMTP'組件,可直接訪問SMTP協議,因爲TIdSMTP *是客戶端,所以不需要其他電子郵件客戶端。如果他想跟蹤發送的電子郵件,他將不得不手動(例如通過IMAP4協議連接到他的電子郵件服務器 - 請參閱TIdIMAP4組件並將電子郵件上傳到所需的文件夾中)。 –

0

如果你想與存在的電子郵件客戶端集成(例如見發送的消息在sentsent items等電子郵件客戶端的文件夾中),你可以使用Simple MAPI。頭文件在Delphi的Mapi單元中翻譯(至少在D2007中)。

但請注意檢查實際客戶端是否支持簡單MAPI。

+0

鏈接的簡單MAPI頁面上的重要信息:'不鼓勵使用簡單MAPI。它可能在Windows的後續版本中被更改或無法使用。# – mjn

+0

@mijn:對。我沒有注意到它。嗯...我看到一些新的任務來臨... – Toto

相關問題