Или вы можете использовать библиотеку Synapse для отправки почты с использованием SMTP, в идеале в новейшем снимке .
Вот код, который должен отправить письмо с приложенным c:\voucher.pdf
файлом от sender@from.com
до recipient@to.com
на smtp.server.com
с логином login
и паролем password
. Что касается остальных функций из класса TMimeMess
, я бы прямо отсылал вас к ссылке .
Я надеюсь, что это сработает, потому что я упростил и локализовал гораздо более сложный код, который я использую, и я не могу ни проверить его, ни скомпилировать. Если нет, давайте понизим это:)
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 шаг в свет (мужик, смените свой ник, пожалуйста, это уже не круто :), было бы очень плохо, если вы отправите список всех получателей всем. С синапсом вы не можете добавить BCC в заголовок сообщения; в MIMEMessage
нет Header.BCCList
свойства.
Вместо этого вы можете напрямую изменить данные перед их отправкой.
// 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 ...