-
Дмитрий Белькевич (12.09.13 23:26) [0]Делаю посылку таким кодом:
function TMakhArchive.SendMail(const Address, Subject, MessageText: string): integer;
var
SMTP: TIdSMTP;
MailMessage: TIdMessage;
begin
Result := 0;
try
SMTP := TIdSMTP.Create(nil);
try
SMTP.Host := DataModule1.MailHost;
SMTP.Port := DataModule1.MailPort;
SMTP.Username := DataModule1.MailLogin;
SMTP.Password := DataModule1.MailPass;
MailMessage := TIdMessage.Create(nil);
try
MailMessage.CharSet := DataModule1.MailCharSet;
MailMessage.From.Address := DataModule1.MailFrom;
MailMessage.Recipients.EMailAddresses := Address + IfThen(DataModule1.MailCopy <> '', ';' + DataModule1.MailCopy);
MailMessage.Subject := Subject;
MailMessage.Body.Text := MessageText;
try
try
SMTP.Connect;
except
Exit(4);
end;
if DataModule1.MailNeedAuthentication then
begin
SMTP.AuthType := TIdSMTPAuthenticationType(DataModule1.MailAuthType);
if not SMTP.Authenticate then
Exit(2);
end;
try
SMTP.Send(MailMessage);
except
Exit(5);
end;
finally
if SMTP.Connected then
SMTP.Disconnect;
end;
finally
FreeAndNil(MailMessage);
end;
finally
FreeAndNil(SMTP);
end;
except
Exit(3);
end;
end;
CharSet = windows-1251. Бывает (пишут - довольно часто), сообщения приходят в KOI 8 вместо 1251, чаще - работает нормально.
Delphi 2010, последний патч Indy. Господа, есть ли мысли, что не так? -
http://pda.delphimaster.net/?id=1375188734&n=4 не поможет?
и еще DataModule1.MailCharSet кодировка что меняется что ли? зачем в переменной она? задать ее жестко и лучше utf-8. -
Дмитрий Белькевич (13.09.13 09:49) [2]>и еще DataModule1.MailCharSet кодировка что меняется что ли?
Да, в инишку вынесена.
> задать ее жестко и лучше utf-8.
Спасибо, попробую. -
Дмитрий Белькевич (13.09.13 15:13) [3]Сделал так, кодировка исправилась, будем тестировать дальше, но, похоже, что стало лучше:
procedure TMakhArchive.InitializeISO(var VHeaderEncoding: char; var vCharSet: string);
begin
VCharSet := IdCharsetNames[idcs_UTF_8];
VHeaderEncoding := 'B';
end;
function TMakhArchive.SendMail(const Address, Subject, MessageText: string): integer;
var
SMTP: TIdSMTP;
MailMessage: TIdMessage;
begin
Result := 0;
try
SMTP := TIdSMTP.Create(nil);
try
SMTP.Host := DataModule1.MailHost;
SMTP.Port := DataModule1.MailPort;
SMTP.Username := DataModule1.MailLogin;
SMTP.Password := DataModule1.MailPass;
MailMessage := TIdMessage.Create(nil);
try
MailMessage.OnInitializeISO := InitializeISO;
MailMessage.CharSet := IdCharsetNames[idcs_UTF_8];
MailMessage.From.Address := DataModule1.MailFrom;
MailMessage.Recipients.EMailAddresses := Address + IfThen(DataModule1.MailCopy <> '', ';' + DataModule1.MailCopy);
MailMessage.Subject := Subject;
MailMessage.Body.Text := MessageText;
MailMessage.Date := Now;
try
try
SMTP.Connect;
except
Exit(4);
end;
if DataModule1.MailNeedAuthentication then
begin
SMTP.AuthType := TIdSMTPAuthenticationType(DataModule1.MailAuthType);
if not SMTP.Authenticate then
Exit(2);
end;
try
SMTP.Send(MailMessage);
except
Exit(5);
end;
finally
if SMTP.Connected then
SMTP.Disconnect;
end;
finally
FreeAndNil(MailMessage);
end;
finally
FreeAndNil(SMTP);
end;
except
Exit(3);
end;
end;