2011-04-22 112 views
3

我有一個問題,我一直在努力約一個星期,無法找到答案。作爲這一切的前言,我在網上搜索了各種各樣的東西。這個問題有很多答案,但似乎沒有人幫助我。使用Gmail SMTP與PHP發送電子郵件

我對PHP有點新鮮,以及我所要求的很多東西(過去幾個月一直在使用它)。讓我來解決問題的基礎:

我在一個學校網絡上,在我的宿舍裏設置了自己的服務器。我正在創建一個網站,我需要驗證用戶的電子郵件,但基本的PHP郵件()函數不起作用。我被告知我需要使用SMTP。所以我決定使用Gmail SMTP最簡單,最便宜的方式。出於這個原因,我在Gmail上創建了一個名爲[email protected]的帳戶。這是代碼。

echo "starting mail sending"; 
      require_once("pear/share/pear/Mail.php"); 

echo "1"; 

$from = "PersonA `<[email protected]`>"; $to = "`<[email protected]`>"; $subject = "Activate your account"; $body = "Hey"; 

$host = "ssl://smtp.gmail.com"; $port = "465"; //also tried 587 $username = "[email protected]"; $password = "password"; 

echo "2"; 

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); 

echo "3"; 

$mailer_params['host'] = $host; $mailer_params['port'] = $port; $mailer_params['auth'] = true; $mailer_params['username'] = $username; $mailer_params['password'] = $password;            
       $smtp = Mail::factory('smtp', $mailer_params); 

echo "4"; 

error_reporting(E_ALL); 

echo "5"; 

if (PEAR::isError($smtp)) { die("Error : " . $smtp->getMessage()); } 

echo "6"; 

$mail = $smtp->send($to, $headers, $body) or die("Something bad happened"); 

echo "7"; 

if (PEAR::isError($mail)) {echo($mail->getMessage();} else {echo(Message successfully sent!);} 
       echo "mail sent hopefully."; 

所以基本上代碼只是停止在該行:

$mail = $smtp->send($to, %headers, $); 

我曾嘗試印刷錯誤,但我不知道現在該怎麼辦。任何提示和幫助表示讚賞。謝謝!!

回答

3

使用這個類:http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html

示例代碼我使用:

require("smtp/smtp.php"); 
require("sasl/sasl.php"); 
$from = '[email protected]'; 
$to = '[email protected]'; 

$smtp=new smtp_class; 
$smtp->host_name="smtp.gmail.com"; 
$smtp->host_port='465'; 
$smtp->user='[email protected]'; 
$smtp->password='XXXXXXXXX'; 
$smtp->ssl=1; 
$smtp->debug=1;  //0 here in production 
$smtp->html_debug=1; //same 

$smtp->SendMessage($from,array($to),array(
"From: $from", 
"To: $to", 
"Subject: Testing Manuel Lemos' SMTP class", 
"Date: ".strftime("%a, %d %b %Y %H:%M:%S %Z") 
), 
"Hello $to,\n\nIt is just to let you know that your SMTP class is working just fine.\n\nBye.\n")); 
+0

是的,這是愚蠢的我。反正,我在哪裏得到sasl.php文件?只有您鏈接的頁面上包含smtp.php。或者它已經在我的服務器上了?我啓用了SASL,並使用Ubuntu教程爲我的後綴服務器啓用SMTP和SASL授權。謝謝! – ingshtrom 2011-04-25 01:57:13

+0

SASL包的鏈接位於該頁面的某處。以下是直接鏈接:http://www.phpclasses.org/package/1888-PHP-Single-API-for-standard-authentication-mechanisms。html – Jorj 2011-05-12 11:51:31

0

如果您使用的是Linux,我建議您在本地機器上設置postfix,並要求您通過外部SMTP服務轉發電子郵件。

http://bookmarks.honewatson.com/2008/04/20/postfix-gmail-smtp-relay/

的原因是,你的PHP腳本可以櫃面超時有一個延遲接觸的Gmail。因此,您可以使用Postfix將電子郵件排隊到本地服務器上,讓PHP腳本執行死機並且信任Postfix通過Gmail發送電子郵件。

如果您使用Windows,我相信您可以找到一個等效的SMTP中繼應用程序(應作爲粗略的猜測來構建)。

0

許多公共網絡阻止SMTP端口上的連接到遠程計算機,以阻止垃圾郵件發送者進入他們的網絡。

你有兩個選擇:

  1. 找到使用不同的端口比25
  2. 利用學校的網絡的官方SMTP服務器SMTP服務器。因爲人們需要發送郵件,所以總是有一個。
0

我總是用 this發送使用Gmail作爲SMTP服務器的郵件。
配置非常簡單

+0

當我試圖從你提供的鏈接中解壓縮下載時,它說它是一個不好的zip文件,因爲它有一個額外的字節或類似的東西。我正在使用Ubuntu 10.10。 – ingshtrom 2011-04-25 02:01:43

+0

它在我的筆記本電腦上正常工作。 – 2011-04-25 16:35:59

+0

我剛剛在我的Mac上試過,它工作正常。不知道爲什麼它不能在我的服務器上工作。 – ingshtrom 2011-04-26 00:07:19

相關問題