我目前有一個應用程序生成PDF憑單和電子郵件給他們的觀點收件人。然而,我使用的功能是客戶端依賴(MS Outlook),我真的希望使這個電子郵件客戶端不可知論,因爲我們有很多客戶,並不是所有人都使用Outlook。發送附件的電子郵件客戶端不可知論者
我已經看過了幾個選項,但真的不能找到在查找什麼,似乎解決我的問題。
有誰知道發送使用客戶SMTP連接電子郵件,無論客戶端發送一個與它的固定,而不會直接調用客戶端做一個好辦法嗎?
我目前有一個應用程序生成PDF憑單和電子郵件給他們的觀點收件人。然而,我使用的功能是客戶端依賴(MS Outlook),我真的希望使這個電子郵件客戶端不可知論,因爲我們有很多客戶,並不是所有人都使用Outlook。發送附件的電子郵件客戶端不可知論者
我已經看過了幾個選項,但真的不能找到在查找什麼,似乎解決我的問題。
有誰知道發送使用客戶SMTP連接電子郵件,無論客戶端發送一個與它的固定,而不會直接調用客戶端做一個好辦法嗎?
或者你可以使用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 ...
但是,這不會與用戶的電子郵件客戶端集成(即他不能跟蹤發送的電子郵件)。不是一個簡單的設計決定! –
@Leonardo當然,它不會整合。如果這是一個要求,你可以嘗試MAPI--在[JCL](http://sourceforge.net/projects/jcl/)中有'JclMapi',但是再次,並非所有的電子郵件客戶端都能正確支持它。 –
@Leonardo:James要求SMTP,這是一個協議,而不是一個程序。 Indy有一個'TIdSMTP'組件,可直接訪問SMTP協議,因爲TIdSMTP *是客戶端,所以不需要其他電子郵件客戶端。如果他想跟蹤發送的電子郵件,他將不得不手動(例如通過IMAP4協議連接到他的電子郵件服務器 - 請參閱TIdIMAP4組件並將電子郵件上傳到所需的文件夾中)。 –
如果你想與存在的電子郵件客戶端集成(例如見發送的消息在sent
,sent items
等電子郵件客戶端的文件夾中),你可以使用Simple MAPI。頭文件在Delphi的Mapi單元中翻譯(至少在D2007中)。
但請注意檢查實際客戶端是否支持簡單MAPI。
我要給這條路線一個鏡頭。 cc不會是一個問題。該應用程序只向一個收件人發送優惠券。該計劃生成10-15個不同的代金券並通過電子郵件發送給我們的客戶客戶。整個過程中一個收件人。目前使用Outlook的實現像一個魅力,但據說並非所有人都在使用Outlook。 – JamesW