2014-11-04 36 views
0

我正在嘗試使用PHP發送郵件。
但它只是不起作用。我聯繫了我的IT老師,我認識的幾位IT研究員,大學工作,但他們都無法幫助我。我知道關於這個的stackoverflow有很多問題,這就是爲什麼我等了很長時間才能發佈這個。但是我查看了所有關於PHP的mail()函數的問題,我找不到,也沒有解決我的問題。我非常絕望。
使用PHP發送郵件對我無效

問題是,它不能使用我的代碼來創建郵件,但它在使用純文本功能時也不起作用。所以這讓我想到問題必須是服務器端。我聯繫了one.com(這是我的網站燒掉的地方),但他們無法幫助我。他們說mail()函數應該可以工作。他們沒有給我這個:
Sushant: - 郵件主機:mailout.one.com
Sushant: - 端口:25
Sushant: - 驗證:無/假
Sushant: - 安全:無/假
Sushant : - 用戶名:您的域名的電子郵件帳戶例如[email protected]
Sushant: - 密碼:您的電子郵件帳戶的密碼

我不知道如何處理這些信息做。我嘗試使用ini_set()函數編輯php.ini文件中的一些內容( mail.add_x_header,mail.log,SMTP,smtp_port,sendmail_from,sendmail_path)。也沒有解決我的問題。

我全碼:

(遺憾的荷蘭語)

$onderwerp = "E-mail adres controlleren"; 
$bericht =" 
U bent succesvol geregistreerd bij theovisser.com.<br> 
Nu kunt u alle verstuurde nieuwsbrieven lezen. Ook kunt u<br> 
nieuwe nieuwsbrieven meteen zien, nog voordat ze bij op op de mat liggen!<br><br> 

Om uw account te activeren moet u alleen nog wel de onderstaande code<br> 
invoeren.<br> 
E-mail code: " .$_SESSION['controle_code']. "<br><br> 

Groeten,<br> 
Samuël Visser 
"; 
// Regels in berichten mogen nooit langer zijn als 70 caracters (PHP regel). 
// Hiermee worden alle regels die langer als 70 caracters zijn ingekort. 
    $bericht = wordwrap($bericht, 70); 
// Verstuur de mail 
if(!isset($_SESSION['mail_verstuurd'])) 
{ 
    if(mail($email,$onderwerp,$bericht)){ 
     echo 'Er is een mail verstuurd naar uw adres.<BR><BR>'; 
     $_SESSION['mail_verstuurd']='true'; 
    }else{ 
     echo 'Het versturen van de mail is mislukt.<BR><BR>'; 
    } 

} 

這並不做任何事情。
而最古怪的是,這並沒有太多的工作:

mail('[email protected]','test','dit is een test'); 

你們能解決我的問題?我真的不知道我做錯了什麼。

編輯:
使用從@ojovirtual建議使用的PHPMailer libary,我得到了以下錯誤:

2014年11月4日13點27分48秒的連接:開放mailout.one .com:25,t = 300,opt = array()2014-11-04 13:28:10 SMTP錯誤:無法連接到服務器:連接嘗試失敗,因爲連接方在一段時間後沒有正確響應時間或建立的連接失敗,因爲連接的主機尚未回覆。 (10060)2014-11-04 13:28:10 SMTP connect()失敗。無法發送郵件。郵件錯誤:SMTP連接()失敗

錯誤中的斜體樣式文本是荷蘭文,它被翻譯成英文。可能與原始英文翻譯有點不同。

這是我用過的設置,我從one.com得到數據如下:

require($main .'PHPMailer-master/PHPMailerAutoload.php'); 

$mail = new PHPMailer; 

$mail->SMTPDebug=3; 
$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'mailout.one.com';      // Specify main and backup SMTP servers 
$mail->SMTPAuth = false;        // Enable SMTP authentication 
$mail->Username = '[email protected]';    // SMTP username 
$mail->Password = 'won't show that here :)';   // SMTP password 
$mail->SMTPSecure = 'tls';        // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 25;          // TCP port to connect to 

$mail->From = '[email protected]'; 
$mail->FromName = 'Samuël Visser'; 
$mail->addAddress('[email protected]', 'Sammie gast');  // Add a recipient 
//$mail->addAddress('[email protected]');     // Name is optional 
//$mail->addReplyTo('[email protected]', 'Information'); 
//$mail->addCC('[email protected]'); 
//$mail->addBCC('[email protected]'); 

$mail->WordWrap = 50;         // Set word wrap to 50 characters 
//$mail->addAttachment('/var/tmp/file.tar.gz');   // Add attachments 
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 
$mail->isHTML(true);         // Set email format to HTML 

$mail->Subject = 'Here is the subject'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

我曾經建議PHPMailer的頁面上的代碼。
感謝您的幫助!

+0

在發送郵件之前,您可能需要登錄到SMTP服務器。我推薦使用[PHPMailer](https://github.com/PHPMailer/PHPMailer)。 – ojovirtual 2014-11-04 12:31:52

+0

在郵件中添加「標題」 – 2014-11-04 12:31:58

+0

標題是可選的,對吧?我沒有做任何事情來登錄到SMTP服務器,每個人都告訴我你不需要這些。但我會嘗試這個庫,謝謝 – 2014-11-04 12:48:15

回答

3

從PHP腳本發送電子郵件時,各種主機具有不同的限制或要求,因此不能始終使用所有PHPMailer庫功能。在這個答案中,我有關於One.com的信息,因爲使用了One.com的問題,我也使用該主機。

One.com可能的郵件設置

主機,用戶名和密碼需要作爲問題陳述來提供。

允許的身份驗證和加密設置取決於所使用的端口,這些都是在One.com所有辦法,但技術支持驗證所有的設置目前不能在PHP腳本中使用:

  • 端口25:認證虛假或STARTTLS
  • 端口2525:驗證錯誤或STARTTLS
  • 端口465:TLS埃勒SSL
  • 端口587:認證虛假或STARTTLS

在一個PHP腳本只能使用以下物質:

  • 端口25:認證假

示例代碼在One.com

驗證下面你可以看到代碼在One.com服務器上工作,如果您用自己的用戶名和密碼替換。

/*** Prepare email information ***/ 
require_once "Mail.php"; 
$from = "[email protected]"; 
$to = "[email protected]"; 
$subject = "Testing PHP SMTP mail"; 
$body = "Hi,\n\nit seems to be working don't you think?"; 
$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject, 'Reply-To' => $from); 

/*** Send email ***/ 
$SendMail = new Mail(); 
$smtp = $SendMail->factory('smtp',array(
'host' => "mailout.one.com", 
'port' => 25, 
'auth' => false, 
'username' => "YOUR_MAIL_USERNAME", 
'password' => "YOUR_MAIL_PASSWORD")); 
$mail = $smtp->send($to,$headers,$body); 

/*** Check for errors ***/ 
$ErrorCheck = new PEAR; 
if ($ErrorCheck->isError($mail)){ 
    echo("<p>".$mail->getMessage()."</p>"); 
}else{ 
    echo("<p>Message successfully sent!</p>"); 
} 
?> 
+0

感謝您的回答!說實話,我沒有檢查你的解決方案是否工作,因爲這個網站不再在線:)。但我完全信任你,如果我再次需要它,會使用你的答案(仍然以one.com爲另一個網站) – 2016-04-18 12:57:46