从美国发送电子邮件

时间:2017-06-10 17:19:13

标签: email delphi ssl indy

我的程序使用Indy 10 TIdSMTP和TIdMessage通过电子邮件发送错误报告。该计划主要在德国使用,但有些客户在美国。

该工具在德国完美运行,但美国客户根本无法发送任何东西。输出显示与德国电子邮件服务器(smtp.web.de)的连接已建立,但在此之后,立即断开连接。抛出“套接字错误#10054连接重置连接”的异常。

以下是一些代码:

procedure SendMail(const PI_sSenderAddress: string; const PI_arrReceiverAddresses, PI_arrCCAddresses, PI_arrBCCAddresses: array of string; const PI_sSubject, PI_sMailText: string; const PI_arrAttachments: array of string; const PI_sHost: string = ''; const PI_sUsername: string = ''; const PI_sPassword: string = ''; const PI_bUseTLS: boolean = False; const PI_nPort: integer = 25; const PI_nTimeoutSeconds: integer = 5 );
var
  smtp: TIdSMTP;
  Mail: TIdMessage;
  i: integer;
  arrAttachments: array of TIdAttachmentFile;
  io: TIdSSLIOHandlerSocketOpenSSL;
begin
  io := nil;
  smtp := TIdSMTP.Create(Application);
  try
    smtp.Password := PI_sPassword;
    smtp.Username := PI_sUsername;
    smtp.Port := PI_nPort;
    smtp.Host := PI_sHost;
    if PI_bUseTLS then begin
      io := TIdSSLIOHandlerSocketOpenSSL.Create(Application);
      smtp.IOHandler := io;
    end;
    smtp.UseTLS := utUseRequireTLS;
    if PI_sUserName <> '' then begin
      smtp.AuthType := satDefault;
    end else begin
      smtp.AuthType := satNone;
    end;
    smtp.HeloName := Split(PI_sUsername, 1, '@');

    mail := TIdMessage.Create( Application );
    try
      mail.Clear;
      mail.From.Address := PI_sSenderAddress;
      mail.From.Text := PI_sSenderAddress;
      mail.Subject := PI_sSubject;
      mail.Recipients.EMailAddresses := ArrayToStr( PI_arrReceiverAddresses, ',' ); //!! only one
      mail.CCList.EMailAddresses := ArrayToStr( PI_arrCCAddresses, ',' );
      mail.BccList.EMailAddresses := ArrayToStr( PI_arrBCCAddresses, ',' );
      mail.ReceiptRecipient.Text := '';
      mail.Body.Add( PI_sMailText );
      mail.Date := now;

      if Length(PI_arrAttachments) > 0 then begin
        SetLength(arrAttachments, Length(PI_arrAttachments));
        for i := 0 to High(PI_arrAttachments) do begin
          arrAttachments[i] := TIdAttachmentFile.Create(mail.MessageParts, PI_arrAttachments[i]);
        end;
      end;

      try
        smtp.ConnectTimeout := PI_nTimeoutSeconds * 1000;
        smtp.Connect;
      if smtp.Connected then begin
        smtp.Send(mail);
      end;
    finally
      smtp.disconnect;
      if Length(arrAttachments) > 0 then begin
        for i := 0 to High(arrAttachments) do begin
          arrAttachments[i].Free;
        end;
      end;
    end;
  finally
    mail.Free;
  end;
finally
  smtp.free;
  if Assigned(io) then io.Free;
end;
end;

我称之为:

SendMail(
  'myaccount@web.de',
  ['receiver@web.de'],
  [],
  [],
  'Subject',
  'Text',
  [],
  'smtp.web.de',
  'myaccount@web.de',
  'mypassword',
  True,
  587
);

有人可以帮忙吗?

编辑:我改为googlemail帐户,但收到同样的错误。目前,我称之为:

我称之为:

SendMail(
  'myaccount@gmail.com',
  ['receiver@web.de'],
  [],
  [],
  'Subject',
  'Text',
  [],
  'smtp.gmail.com',
  'myaccount@gmail.com',
  'mypassword',
  True,
  587
);

0 个答案:

没有答案