簡體   English   中英

用PHP發送郵件不起作用

[英]Sending mail with php isn't working

我是相當新的PHP,我最近嘗試使用郵件功能,但它無法正常工作。 這是我的代碼:

<?php

// Pick up the form data and assign it to variables
$name = $_POST['name'];
$email = $_POST['email'];
$topic = $_POST['topic'];
$comments = $_POST['comments'];

// Build the email (replace the address in the $to section with your own)

$to = 'tishsny@gmail.com';
$subject = "New message: $topic";
$message = "$name said: $comments";
$headers = "From: $email";

// Send the mail using PHPs mail() function
if( mail($to, $subject, $message, $headers) ) header("Location:../forms/success.html");
else header( "Location:../forms/failure.html" );
?>

我將sendmail的路徑添加到php.ini文件中,但它仍然無法正常工作。 郵件功能總是返回true但我沒有收到任何郵件。 mail.log顯示了一堆超時。 這是一些輸出:

postfix/qmgr[3523]: BB800B124A: from=<_www@Leticias-MacBook-Pro.local>, size=382, nrcpt=1 (queue active)
postfix/qmgr[3523]: CB34EB0E9F: from=<_www@Leticias-MacBook-Pro.local>, size=405, nrcpt=1 (queue active)
postfix/qmgr[3523]: D6C18B0D7B: from=<_www@Leticias-MacBook-Pro.local>, size=394, nrcpt=1 (queue active)
postfix/smtp[3527]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/smtp[3533]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/pickup[3522]: 8A9EEB1823: uid=70 from=<_www>
postfix/cleanup[3524]: 8A9EEB1823: message-id=<20130321193156.8A9EEB1823@Leticias-MacBook-Pro.local>
postfix/qmgr[3523]: 8A9EEB1823: from=<_www@Leticias-MacBook-Pro.local>, size=392, nrcpt=1 (queue active)
postfix/smtp[3526]: connect to mx3.hotmail.com[65.55.37.72]:25: Operation timed out
postfix/smtp[3531]: connect to gmail-smtp-in.l.google.com[74.125.141.27]:25: Operation timed out
postfix/smtp[3531]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/smtp[3531]: connect to alt1.gmail-smtp-in.l.google.com[2607:f8b0:400e:c02::1b]:25: No route to host

你可以發布你的php.ini smtp部分嗎?

如果您正在使用GMail(它看起來像......),您將需要使用SSL / TLS,我不知道PHP是否支持本機SMTP。 您可以將轉發器與Sendmail一起使用並以未加密的方式在本地發送,然后讓Sendmail通過TLS在Gmail上轉發它。

您可能需要考慮使用PHPMailer等第三方解決方案。 它支持Gmail的SSL / TLS,請查看此示例:

http://phpmailer.worxware.com/index.php?pg=examplebgmail

您可以從以下位置下載PHPMailer:

http://sourceforge.net/projects/phpmailer/

這是PHPMailer的另一個教程:

http://phpmailer.worxware.com/index.php?pg=tutorial#2

編輯:正如馬克所說,您的ISP可能阻止出站端口25. Gmail還支持端口465上的SMTP(但同樣需要TLS)。

您的ISP和/或您的網絡/主機的防火牆似乎可能不允許出站SMTP連接。 您沒有理由看到有關操作超時無主機路由的錯誤。

以下是一些可能的原因:

  1. 您的ISP(Verizon,AT&T,Comcast或您的學校等)阻止了您的出站端口(以防止垃圾郵件和網絡攻擊)。

這是最可能的情況。 基本上,您不能在家庭網絡上將電子郵件作為電子郵件“主機”發送。 您可以在過去通過gmail或其他SMTP服務器設置中繼服務器,但最近ISP變得更智能並阻止了中繼請求(是的,它們會讀取您發送或接收的每個數據)。

所以我的建議是:支付安全的VPN,如果這是你想要做的。

  1. 您不在家庭網絡,但中繼服務器/路由器會阻止您的出站請求。 您必須找到一種在防火牆中轉發端口的方法。 根據路由器或中繼服務器的操作系統/固件,可能有數百萬種不同的轉發端口的方式。 或者您可以完全關閉防火牆。

  2. 這完全不在你手中。 您的IP被標記為spambot(很可能有人竊取了您的IP並將其用於網絡攻擊)。 您將不得不更改您的IP(或支付安全的VPN)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM