全部产品
阿里云办公

使用SSL加密465端口发信样例及Demo

更新时间:2018-01-31 19:30:56

适用场景

因服务器的25端口默认封闭,需要使用SSL加密端口(通常是465)来对外发信,以下样例适用于程序调用外部邮箱发信的场景,调用的邮箱服务器需要支持SSL加密。这里介绍.NET和PHP的样例,其他语言实现方法思路基本相同。

基本原理

通过连接外部邮箱的发信服务器,并通过程序配置的账号密码鉴权验证来发送邮件,而不是服务器本身来发送邮件。基本原理与本地电脑使用outlook等客户端连接邮箱服务器发送邮件一致。

实现要点

基本实现方式与连接25端口发送邮件一致,但改为SSL加密协议后,需要特别注意:

  • 将连接外部邮箱服务器的端口改为邮箱服务器的SSL加密端口(通常是465端口),具体配置可以与邮箱服务商咨询。
  • 在程序中启用SSL加密协议连接邮箱服务器。

具体实现

截取部分源代码样例如下:

  1. MailMessage mmsg = new MailMessage();
  2. //邮件主题
  3. mmsg.Subject = "主题";
  4. mmsg.BodyFormat = MailFormat.Html;
  5. //邮件正文
  6. mmsg.Body = "正文";
  7. //正文编码
  8. mmsg.BodyEncoding = Encoding.UTF8;
  9. //优先级
  10. mmsg.Priority = MailPriority.High;
  11. //发件者邮箱地址
  12. mmsg.From = "xxxxxx";
  13. //收件人收箱地址
  14. mmsg.To = "xxxxxx";
  15. mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
  16. //用户名
  17. mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "xxxxxx");
  18. //密码
  19. mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "xxxxxx");
  20. //端口
  21. mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
  22. //使用SSL mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
  23. //Smtp服务器
  24. System.Web.Mail.SmtpMail.SmtpServer = "smtp.xx.com";
  25. SmtpMail.Send(mmsg);

Demo下载

可将以上Demo上传至服务器测试发信是否能够成功。

PHP源代码及Demo

截取部分源代码样例如下

  1. <?php
  2. require 'PHPMailerAutoload.php';
  3. require_once('class.phpmailer.php');
  4. require_once("class.smtp.php");
  5. $mail = new PHPMailer();
  6. $mail->CharSet ="UTF-8"; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置为 UTF-8
  7. $mail->IsSMTP(); // 设定使用SMTP服务
  8. $mail->SMTPAuth = true; // 启用 SMTP 验证功能
  9. $mail->SMTPSecure = "ssl"; // 启用SSL
  10. $mail->SMTPDebug = 2;
  11. $mail->Host = "smtp.xxx.com"; // SMTP 服务器
  12. $mail->Port = 465; // SMTP服务器的端口号
  13. $mail->Username = "xxx@xxx.com"; // SMTP服务器用户名
  14. $mail->Password = "xxx"; // SMTP服务器密码
  15. $mail->SetFrom('xxx@xxx.com', 'qq'); // 设置发件人地址和名称
  16. $mail->AddReplyTo("xxx@xxx.com","xxx@xxx.com");
  17. // 设置邮件回复人地址和名称
  18. $mail->Subject = 'xxx'; // 设置邮件标题
  19. $mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端";
  20. // 可选项,向下兼容考虑
  21. $mail->MsgHTML('<html>helo</html>'); // 设置邮件内容
  22. $mail->AddAddress('xxx@xxx.com', "xxx@xxx.com");
  23. //$mail->AddAttachment("images/phpmailer.gif"); // 附件
  24. if(!$mail->Send()) {
  25. echo "发送失败:" . $mail->ErrorInfo;
  26. } else {
  27. echo "恭喜,邮件发送成功!";
  28. }
  29. ?>

Demo下载

可将以上Demo上传至服务器测试发信是否能够成功。

ASP源代码及Demo

  1. <%
  2. Set Mail = CreateObject("CDO.Message")
  3. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  4. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="smtp.126.com"
  5. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
  6. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
  7. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  8. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  9. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="xxx@126.com"
  10. Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="xxxxx"
  11. Mail.Configuration.Fields.Update
  12. Mail.Subject="Email subject"
  13. Mail.From="xxxxx"
  14. Mail.To="xxxx"
  15. Mail.TextBody="This is an email message."
  16. Mail.Send
  17. Set Mail = Nothing
  18. %>
  19. <%="发送成功!!!"%>

Demo下载

调试方法

  1. 联系邮箱服务商拿到使用SSL加密方式发信的设置。通常包含:
    • 发信服务器地址,如smtp.xx.com
    • 发信服务器端口号,加密端口一般是465,普通端口25
    • 邮箱用户名,可能是email地址,也可能是email地址前缀,具体可咨询邮箱服务商
    • 邮箱客户端密码,部分邮箱服务商Web浏览器登录界面的登录密码和客户端密码并不相同,可能需要单独设置,具体可咨询邮箱服务商。
  2. 在本地电脑使用客户端软件(Outlook,Foxmail等),使用上述拿到的配置来设置本地客户端,并发信测试,如果不能发送,也需要联系邮箱服务商。具体配置方法略。这步主要是验证第1步拿到的配置是否正确,如果配置不正确,本地发信就会报错。

  3. 把程序中的邮箱服务器配置项按照上述测试通过的配置来编写,并实际发信测试。