線上發信如何通過驗證的SMTP

| |
2013/08/09    11:26    0    714    admin 程式花絮 不指定
[PHP] 線上發信如何通過驗證的SMTP(使用PHPMailer)

在 PHP 中可以使用 mail() 函式進行信件的發送,但是前提是您必須使用一個不用驗證即可寄信的 SMTP。
如果您必須使用一個需要帳號、密碼來通過驗證的 SMTP,就不能使用 mail() 函式了。
如果您不想再額外的安裝 PEAR 函式庫,建議您可以採用 opensource 的類別:phpMailer。
phpMailer 官方網站
http://phpmailer.codeworxtech.com/

您可以在此下載 phpMailer 的類別:
http://phpmailer.codeworxtech.com/index.php?pg=sf&p=dl

建議您依據您使用的 PHP 版本來下載適合的類別。
下載完畢後請解壓縮到指定資料夾中,
其中重要的類別檔案為:,
請將這個檔案放置與寄發信件程式同一層。

以下茶米簡單寫的一個範例:

<?php    
include("class.phpmailer.php"); //匯入PHPMailer類別      
      
$mail= new PHPMailer(); //建立新物件        
$mail->IsSMTP(); //設定使用SMTP方式寄信        
$mail->SMTPAuth = true; //設定SMTP需要驗證        
$mail->SMTPSecure = "ssl"; // Gmail的SMTP主機需要使用SSL連線  
$mail->Host = "smtp.gmail.com"; //Gamil的SMTP主機        
$mail->Port = 465;  //Gamil的SMTP主機的SMTP埠位為465埠。        
$mail->CharSet = "big5"; //設定郵件編碼    
$mail->Username = "*********"; //設定驗證帳號        
$mail->Password = "*********"; //設定驗證密碼      
$mail->From = XXX@XXX.XXX.XXX; //設定寄件者信箱        
$mail->FromName = "測試人員"; //設定寄件者姓名      
$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題        
$mail->Body = "大家好,      
這是一封測試信件!      
"; //設定郵件內容        
$mail->IsHTML(true); //設定郵件內容為HTML        
$mail->AddAddress("david@e-happy.com.tw", "茶米"); //設定收件者郵件及名稱        
      
if(!$mail->Send()) {        
echo "Mailer Error: " . $mail->ErrorInfo;        
} else {        
echo "Message sent!";        
}    
?>  
茶米


用PHP來發MAIL的方法給有需要的朋友參考一下

1.用PHP內建的mail()函式

一般在發信時入須要先設好您的mail-server,會有問題的大多是windows的系統.在使用這一個函式時如果出現找不到函式那就是您的mail-server相關設定沒有設好.您只要修改您的php.ini就可以了請找到這二行

SMTP = localhost ;
for win32 onlysendmail_from = me@localhost.com ;for win32 onlysmtp

必須要找一台可以提供relay的機器來發信有關主機請自己找相關文件.接下來我們開始談有關mail這一個函式在一封完整的信件中一定會有以下的幾個元件

1.收件人
2.主題
3.信件內容

以要發一封簡單的信件只要把值帶入mail()中就可以了。

例:
mail("收件人","信件主題", 信件內容[, 標頭]);

這樣即可,若須更詳細的說明可參考此篇文章(Mail函式講解 http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=2516

2.mb_send_mail

基本上mb_send_mail的用法與mail類似,只是mail函式必需隨這所使用的語言,適當地設定mail的檔頭部份所宣告的charset,以及檔頭部份、本文部份的編碼方式,但mb_send_mail可以自動進行這些處理,以下為mb_send_mail的原型與用法:

原型:

bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers= NULL [, string $additional_parameter= NULL ]] )


用法:

mb_send_mail("收件人","信件主題", 信件內容[, 標頭]);

若需進一步資料請參閱:http://tw.php.net/manual/en/function.mb-send-mail.php  

3.使用PHPMailer

在 PHP 中可以使用 mail() 函式進行信件的發送,但是前提是您必須使用一個不用驗證即可寄信的 SMTP。
如果您必須使用一個需要帳號、密碼來通過驗證的 SMTP,就不能使用 mail() 函式了。 如果您不想再額外的安裝 PEAR 函式庫,建議您可以採用 opensource 的類別:phpMailer。

phpMailer 官方網站http://phpmailer.codeworxtech.com/

您可以在此下載 phpMailer 的類別: http://phpmailer.codeworxtech.com/index.php?pg=sf&p=dl 建議您依據您使用的 PHP 版本來下載適合的類別。

下載完畢後請解壓縮到指定資料夾中, 其中重要的類別檔案為:, 請將這個檔案放置與寄發信件程式同一層。 以下為使用範例:

include("class.phpmailer.php"); //匯入PHPMailer類別

$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->Host = "XXX.XXX.XXX.XXX"; //設定SMTP主機
$mail->Port = 25; //設定SMTP埠位,預設為25埠。
$mail->CharSet = "big5"; //設定郵件編碼

$mail->Username = "*********"; //設定驗證帳號
$mail->Password = "*********"; //設定驗證密碼

$mail->From = XXX@XXX.XXX.XXX; //設定寄件者信箱
$mail->FromName = "測試人員"; //設定寄件者姓名

$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題
$mail->Body = "大家好, 這是一封測試信件! "; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AddAddress(123@123, "test"); //設定收件者郵件及名稱

if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}


如此即可通過有驗證的SMTP了,另外phpMailer也可以透過Gmail 的SMTP 發信,其範例如下:

include("class.phpmailer.php"); //匯入PHPMailer類別

$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->SMTPSecure = "ssl"; // Gmail的SMTP主機需要使用SSL連線
$mail->Host = "smtp.gmail.com"; //Gamil的SMTP主機
$mail->Port = 465; //Gamil的SMTP主機的SMTP埠位為465埠。
$mail->CharSet = "big5"; //設定郵件編碼

$mail->Username = "*********"; //設定驗證帳號
$mail->Password = "*********"; //設定驗證密碼

$mail->From = XXX@XXX.XXX.XXX; //設定寄件者信箱
$mail->FromName = "測試人員"; //設定寄件者姓名

$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題
$mail->Body = "大家好,這是一封測試信件! "; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AddAddress(123@123, "test"); //設定收件者郵件及名稱

if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}


一般來說這樣即可完成使用 Gmail 發信的動作了,但有幾個要注意的事項敘述如下:

1.其中要注意的是Gmail 的 SMTP主機固定位址是 smtp.gmail.com,必須使用 465 埠以 SSL 的方式來連線。
2.有許多朋友可能在測試時還是無法正確連線,若要使用 SSL 的方式進行連線,PHP 必須安裝 OpenSSL 的擴充程式,如此才能正確連線並使用 Gmail 執行寄信的動作。YOGO整理


phpmailhtml.html ( 寄送 HTML 格式的電子郵件 ) :2003.2.24 更新

<?php
/* 收件人 */
$to = "Kelly <kelly@example.com>";

/* 主旨 */
$subject = "Birthday Reminders for August";

/* 內容 */
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';

/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=big5\r\n";

/* additional headers */
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";

$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* and now mail it */
mail($to, $subject, $message, $headers);

?>
網際威龍


Tags: , , , , , | 引用(0)