我目前正在编写一份应用程序,可以向他们的透视收件人生成pdf凭证和电子邮件。然而,我使用的功能是客户端依赖(MS Outlook),我真的想让这个电子邮件客户端不可知,因为我们有很多客户,而不是所有客户都使用Outlook。
我已经看了几个选项,但在搜索中找不到任何可以解决我问题的东西。
有没有人知道使用客户smtp连接发送电子邮件的好方法,无论客户端是什么,并发送附件,而无需直接调用客户端来执行此操作?
答案 0 :(得分:5)
或者您可以使用Synapse库,使用SMTP发送邮件,最好是newest snapshot。
以下代码应该将包含c:\voucher.pdf
sender@from.com
文件的邮件从recipient@to.com
发送到smtp.server.com
到login
,并使用登录password
和密码{{ 1}}。关于TMimeMess
课程中的其他功能,我会直接将您推荐给the reference。
我希望这会有效,因为我已经简化并本地化了我正在使用的更复杂的代码,我无法验证它或编译。如果没有,让我们贬低它:)
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 := 'sender@from.com';
Header.ToList.Clear;
Header.ToList.Add('recipient@to.com');
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的好评(男人,请改变你的昵称,这不再酷),如果你将所有收件人的名单发送给每个人,那将是非常糟糕的。使用synapse you cannot将BCC添加到邮件头; Header.BCCList
中没有MIMEMessage
属性。
相反,您可以在发送数据之前直接修改数据。
// First, you will remove the line where you are adding a recipient to the list
Header.ToList.Add('recipient@to.com');
// 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: jane@invisiblecustomer.com, lisa@invisiblecustomer.com');
if SendToRaw ...
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您想与现有的电子邮件客户端集成(例如,请参阅电子邮件客户端的sent
,sent items
等文件夹中的已发送邮件),您可以使用Simple MAPI 。标题在Delphi的Mapi单元中翻译(至少在D2007中)。
但请注意检查实际客户端是否支持简单MAPI。