在Delphi中使用indy SMTP发送gmail邮件

在Delphi中发送email很简单,发送ssl方式的gmail邮件也很简单,只要在使用的idSMTP上附加一个TIdSSLIOHandlerSocket 就可以了。
使用控件

  1. procedure sendMail(sToMail, sSubject, sContent: String);
  2. var
  3.     SMTP: TIdSMTP;
  4.     MailMessage: TIdMessage;
  5.     SSLSocket: TIdSSLIOHandlerSocket;
  6. begin
  7.   SMTP        := TIdSMTP.Create(nil);
  8.   SSLSocket := TIdSSLIOHandlerSocket.Create(nil);
  9.   MailMessage:= TIdMessage.Create(nil);
  10.  
  11.   SMTP.IOHandler := SSLSocket;
  12.   SMTP.Port   := 465;
  13.   SMTP.Host := 'smtp.gmail.com';
  14.   SMTP.AuthenticationType  := atLogin;
  15.  
  16.   smtp.UserName     := 'SunnyYu2000';
  17.   smtp.Password      := 'xxxxxx';
  18.  
  19.   // 设置邮件的信息
  20.   MailMessage.From.Address := 'SunnyYu2000@gmail.com';
  21.   MailMessage.Recipients.EMailAddresses := sToMail;
  22.   MailMessage.Subject := sSubject;  
  23.   MailMessage.Body.Text := sContent;
  24.  
  25.   //发送邮件
  26.   try
  27.     try
  28.       SMTP.Connect(1000);
  29.       SMTP.Send(MailMessage);
  30.       ShowMessage('发送成功');
  31.     except on E:Exception do
  32.       ShowMessage('发送失败: ' + E.Message);
  33.     end;
  34.   finally
  35.     if SMTP.Connected then
  36.       SMTP.Disconnect;
  37.   end;
  38.  
  39.   MailMessage.Free;
  40.   SSLSocket.Free;
  41.   SMTP.Free;
  42. end;

编译后需要SSL动态库支持,支持库可以到Indy网站上下载到。
如果需要发送附件,可以再发送前添加如下类似代码

  1.    // 添加邮件的附件
  2.    TIdAttachment.Create(MailMessage.MessageParts, sAttachmentFileName);

————–
Indy需要的SSL支持dll下载地址 http://www.indyproject.org/Sockets/SSL.EN.aspx

Popularity: 5% [?]

Related

Comments

6 Responses to “在Delphi中使用indy SMTP发送gmail邮件”

  1. lovefly on November 3rd, 2009 6:08 pm

    你好 想请教你关于gmail发信的问题 – - 用了上面的代码不行 两个dll都有了 总是刚发访问包就卡死了 我QQ973506 能加一下么

    [Reply]

  2. Louis on February 13th, 2011 12:29 pm

    编译通过,
    下载的dll无效,
    我拷贝了foxmail的两个dll到当前exe文件目录中,但连接不上.
    易邮件群发的2010年的DLL也不行!
    请联系我: luyulouis@21cn.com

    [Reply]

  3. Louis on February 13th, 2011 12:31 pm

    编译通过,
    下载的dll无效,
    我拷贝了foxmail的两个dll到当前exe文件目录中,但连接不上.
    易邮件群发的2010年的DLL也不行.
    提示–发送失败: connect time out.
    请联系我: luyulouis@21cn.com

    [Reply]

  4. Louis on February 13th, 2011 12:52 pm

    你好 想请教你关于gmail发信的问题:
    上面的代码 编译通过,
    但下载的DLL无效.
    我拷贝了 foxmail的 或 易邮件群发的 两个DLL到当前EXE文件目录中,出错提示–
    发送失败:Connect timed out.
    发送失败:Error connecting with SSL.

    请联系我: luyulouis@21cn.com

    [Reply]

  5. tqs on October 29th, 2012 11:04 am

    在这句话之前 SMTP.IOHandler := SSLSocket;
    需要一句:SSLSocket.SSLOptions.Method:=sslvSSLv3;

    [Reply]

    sunny Reply:

    感谢指出,早先gmail的服务器使用默认值也可以发送的,现在不行了。
    还有 Gmail有两个端口,采用的不同协议,一个是 SSL 协议, 还有一个是 TLS 协议

    [Reply]