基于安全考慮,云虛擬主機的25端口默認封閉,如果您有發送郵件的需求,建議使用SSL加密端口(465端口)來對外發送郵件。本文通過提供.NET、PHP和ASP樣例來介紹使用SSL加密端口發送郵件的方法,其他語言的實現思路與本文介紹的方法基本相同。
背景信息
基本原理
使用SSL加密端口發送郵件的基本原理與本地主機使用客戶端(例如Outlook等)連接郵箱服務器發送郵件一致。即主機通過連接外部郵箱的發郵件服務器,并通過程序配置的賬號密碼鑒權驗證來發送郵件,而不是服務器本身來發送郵件。
實現要點
使用SSL加密端口發送郵件的基本實現方式與使用25端口發送郵件一致,但改為SSL加密協議后,需要特別注意以下幾點:
編寫好的程序調用外部郵箱發送郵件時,郵箱服務器需支持SSL加密功能。
主機連接郵箱服務器時,請在編寫好的程序中啟用SSL加密協議。
將連接外部郵箱服務器的端口改為SSL加密端口(465端口),具體配置信息可以向郵箱服務商咨詢。
使用限制
Windows操作系統增強版云虛擬主機不支持發送郵件。
前提條件
確認PHP函數的fsockopen
參數為啟動狀態。
PHP函數的fsockopen
參數默認為啟動狀態。如需修改該參數狀態,具體操作,請參見設置PHP.INI參數。
操作步驟
聯系郵箱服務商獲取使用SSL加密方式發送郵件的配置信息。
涉及的主要配置項如下所示:
配置項
說明
發郵件服務器地址
輸入服務器郵箱地址。例如,a***.example.com。
發郵件服務器端口號
加密端口一般是465端口。
郵箱用戶名
可能是Email地址,也可能是Email地址前綴,具體可咨詢郵箱服務商。
郵箱客戶端密碼
部分郵箱服務商Web瀏覽器登錄界面的登錄密碼和客戶端密碼并不相同,可能需要單獨設置,具體可咨詢郵箱服務商。
在本地主機使用客戶端軟件(Outlook、Foxmail等),使用已獲取的郵件配置信息設置本地客戶端,并發送郵件測試。
說明如果郵件發送失敗,表示獲取的配置信息不正確,您需要聯系郵箱服務商解決。
根據實際的開發語言選擇對應的程序樣例,并將程序樣例下載到本地。
程序樣例如下所示:
截取部分源程序樣例如下:
MailMessage mmsg = new MailMessage(); mmsg.Subject = "主題"; //郵件主題 mmsg.BodyFormat = MailFormat.Html; mmsg.Body = "正文"; //郵件正文 mmsg.BodyEncoding = Encoding.UTF8; //正文編碼 mmsg.Priority = MailPriority.High; //優先級 mmsg.From = "a***@example.com"; //發件人郵箱地址 mmsg.To = "b***@example.com"; //收件人郵箱地址 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "test01"); //用戶名 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "123****"); //密碼 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465); //端口 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true"); //使用SSL System.Web.Mail.SmtpMail.SmtpServer = "smtp.****.com"; //smtp服務器 SmtpMail.Send(mmsg);
截取部分源程序樣例如下:
<?php require 'PHPMailerAutoload.php'; require_once('class.phpmailer.php'); require_once("class.smtp.php"); $mail = new PHPMailer(); $mail->CharSet="UTF-8"; //設定郵件編碼,默認ISO-8859-1,如果發中文此項必須設置為 UTF-8 $mail->IsSMTP(); //設定使用SMTP服務 $mail->SMTPAuth = true; //啟用SMTP驗證功能 $mail->SMTPSecure = "ssl"; //啟用SSL $mail->SMTPDebug = 2; $mail->Host = "smtp.****.com"; //SMTP服務器 $mail->Port = 465; //SMTP服務器的端口號 $mail->Username = "test01"; //SMTP服務器用戶名 $mail->Password = "123****"; //SMTP服務器密碼 $mail->SetFrom('a***@example.com', 'a***'); //設置發件人地址和名稱 $mail->AddReplyTo("b***@example.com","b***"); //設置郵件回復人地址和名稱 $mail->Subject = '郵件標題'; //設置郵件標題 $mail->AltBody = "為了查看該郵件,請切換到支持HTML的郵件客戶端"; //可選項,向下兼容考慮 $mail->MsgHTML('<html>helo</html>'); //設置郵件內容 $mail->AddAddress('c***@example.com', "c***"); $mail->AddAttachment("images/phpmailer.gif"); //附件 if(!$mail->Send()) { echo "發送失敗:" . $mail->ErrorInfo; } else { echo "恭喜,郵件發送成功!"; } ?>
截取部分源程序樣例如下:
<% Set Mail = CreateObject("CDO.Message") Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="smtp.****.com" Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1 Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="test01" Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="123****" Mail.Configuration.Fields.Update Mail.Subject="Email subject" Mail.From="a***@example.com" Mail.To="b***@example.com" Mail.TextBody="This is an email message." Mail.Send Set Mail = Nothing %> <%="發送成功!!!"%>
使用已通過測試的配置信息,編寫程序樣例中的郵箱服務器配置項。
將編寫好的程序通過FileZilla工具上傳到云虛擬主機上,并實際發送郵件測試。
程序上傳到云虛擬主機的具體操作,請參見通過FileZilla管理網站程序文件。