z
В таких случаях надо максимально развязывать код. Имхо. но тебе видней
Size: a a a
z
N
S
DL
N
N
DB
N
DB
function SendMail(const Address, Subject, MessageText: string): string;
var
Msg: TMimeMess; //собщение
StringList: TStringList; //содержимое письма
MIMEPart: TMimePart; //части сообщения (на будущее)
begin
Result := 'OK';
Msg := TMimeMess.Create; //создаем новое сообщение
try
StringList := TStringList.Create;
try
//Добавляем заголовки
Msg.Header.Subject := Subject;//тема сообщения
Msg.Header.From := WebDataModule.MailFrom; //имя и адрес отправителя
Msg.Header.ToList.Add(''); //имя и адрес получателя
//создаем корневой элемент
MIMEPart := Msg.AddPartMultipart('alternative', nil);
StringList.Text := MessageText;
Msg.AddPartText(StringList, MIMEPart);
//Кодируем и отправляем
Msg.EncodeMessage;
if not SendToRaw(WebDataModule.MailFrom, Address, WebDataModule.MailHost, Msg.Lines,
WebDataModule.MailLogin, WebDataModule.MailPass) then
Result := 'CouldntSendMail';
finally
FreeAndNil(Msg);
end;
finally
FreeAndNil(StringList);
end;
end;
DB
// if you need support for upgrade session to TSL/SSL, uncomment next lines:
// SMTP.AutoTLS := True;
// if you need support for TSL/SSL tunnel, uncomment next lines:
// SMTP.FullSSL := True;
DB
N
DK
N
DB
function SendMail(const Address, Subject, MessageText: string): string;
var
SMTP: TIdSMTP;
MailMessage: TIdMessage;
idSSLOpen: TIdSSLIOHandlerSocketOpenSSL;
begin
Result := 'OK';
try
SMTP := TIdSMTP.Create(nil);
try
idSSLOpen := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
idSSLOpen.SSLOptions.Method := sslvSSLv23;
idSSLOpen.SSLOptions.Mode := sslmUnassigned;
SMTP.IOHandler := idSSLOpen;
SMTP.UseTLS := utUseImplicitTLS;
SMTP.Host := WebDataModule.MailHost;
SMTP.Port := WebDataModule.MailPort;
SMTP.Username := WebDataModule.MailLogin;
SMTP.Password := WebDataModule.MailPass;
MailMessage := TIdMessage.Create(nil);
try
MailMessage.OnInitializeISO := TDummyEncode.SetCharSet;
MailMessage.CharSet := IdCharsetNames[idcs_UTF_8];
MailMessage.ContentType := 'text/plain; charset=utf-8';
MailMessage.From.Address := WebDataModule.MailFrom;
MailMessage.Recipients.EMailAddresses :=
Address + IfThen(WebDataModule.MailCopy <> '', ';' + WebDataModule.MailCopy);
MailMessage.Subject := Subject;
MailMessage.Body.Text := MessageText;
MailMessage.Date := Now;
try
try
SMTP.Connect;
except
Exit('rsConnError');
end;
if WebDataModule.MailNeedAuthentication then
begin
SMTP.AuthType := TIdSMTPAuthenticationType(WebDataModule.MailAuthType);
try
if not SMTP.Authenticate then
Exit('rsAuthError');
except
Exit('rsAuthError');
end;
end;
try
SMTP.Send(MailMessage);
except
Exit('rsSmtpError');
end;
finally
if SMTP.Connected then
SMTP.Disconnect;
end;
finally
FreeAndNil(MailMessage);
end;
finally
FreeAndNil(idSSLOpen);
end;
finally
FreeAndNil(SMTP);
end;
except
Exit('rsOtherError');
end;
end;
type
TDummyEncode = class
protected
class procedure SetCharSet(var VHeaderEncoding: char; var VCharSet: string);
end;
class procedure TDummyEncode.SetCharSet(var VHeaderEncoding: char; var VCharSet: string);
begin
VCharSet := IdCharsetNames[idcs_UTF_8];
VHeaderEncoding := 'B';
end;
DB
N
RS
RS
S