亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Die PHP-Mail-Funktion kann E-Mails nicht vollst?ndig versenden
P粉340264283
P粉340264283 2023-08-29 11:27:53
0
1
552
<p><br /></p> <pre class="brush:php;toolbar:false;"><?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Von: yoursite.com'; $to = 'contact@yoursite.com'; $subject = 'Kundenanfrage'; $body = "Von: $namen E-Mail: $emailn Nachricht:n $message"; if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { echo '<p>Ihre Nachricht wurde gesendet!</p>'; } anders { echo '<p>Etwas ist schiefgelaufen, gehen Sie zurück und versuchen Sie es erneut!</p>'; } } ?></pre> <p>Ich versuche ein einfaches E-Mail-Formular zu erstellen. Das Formular selbst befindet sich auf meiner Seite <code>index.html</code>, es wird jedoch an eine separate Seite ?Vielen Dank für Ihre Einreichung“ weitergeleitet, <code>thankyou.php</code>, die das oben Genannte enth?lt PHP ist in den Code eingebettet. Der Code wird einwandfrei übermittelt, die E-Mail wird jedoch nie gesendet. Wie kann ich dieses Problem l?sen? </p>
P粉340264283
P粉340264283

Antworte allen(1)
P粉518799557

雖然此答案的某些部分僅適用于 mail() 函數(shù)本身的使用,但其中許多故障排除步驟可以應(yīng)用于任何 PHP 郵件系統(tǒng)。嗯>

您的腳本未發(fā)送電子郵件的原因有多種。除非存在明顯的語法錯(cuò)誤,否則很難診斷這些事情。如果沒有,您需要仔細(xì)檢查下面的清單,以查找您可能遇到的任何潛在陷阱。

確保錯(cuò)誤報(bào)告已啟用并設(shè)置為報(bào)告所有錯(cuò)誤

錯(cuò)誤報(bào)告對(duì)于根除代碼中的錯(cuò)誤以及 PHP 遇到的一般錯(cuò)誤至關(guān)重要。需要啟用錯(cuò)誤報(bào)告才能接收這些錯(cuò)誤。將以下代碼放在 PHP 文件的頂部(或主配置文件中)將啟用錯(cuò)誤報(bào)告。

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

請(qǐng)參閱如何獲得有用的錯(cuò)誤PHP 中的消息?此答案了解更多詳細(xì)信息。

確保調(diào)用 mail() 函數(shù)

這可能看起來很愚蠢,但一個(gè)常見的錯(cuò)誤是忘記在代碼中實(shí)際放置 mail() 函數(shù)。確保它在那里并且沒有被注釋掉。

確保正確調(diào)用mail()函數(shù)

郵件函數(shù)采用三個(gè)必需參數(shù),以及可選的第四個(gè)和第五個(gè)參數(shù)。如果您對(duì) mail() 的調(diào)用沒有至少三個(gè)參數(shù),它將失敗。

如果您對(duì) mail() 的調(diào)用沒有按正確順序提供正確的參數(shù),它也會(huì)失敗。

檢查服務(wù)器的郵件日志

您的網(wǎng)絡(luò)服務(wù)器應(yīng)該記錄通過它發(fā)送電子郵件的所有嘗試。這些日志的位置會(huì)有所不同(您可能需要詢問服務(wù)器管理員它們的位置),但通??梢栽谟脩舾夸浀?logs 下找到它們。里面將是服務(wù)器報(bào)告的與您嘗試發(fā)送電子郵件相關(guān)的錯(cuò)誤消息(如果有)。

檢查端口連接是否失敗

端口阻止是大多數(shù)開發(fā)人員在集成代碼以使用 SMTP 發(fā)送電子郵件時(shí)面臨的一個(gè)非常常見的問題。并且,這可以在服務(wù)器郵件日志中輕松追蹤(郵件日志服務(wù)器的位置可能因服務(wù)器而異,如上所述)。如果您位于共享托管服務(wù)器上,則默認(rèn)情況下端口 25 和 587 仍處于阻止?fàn)顟B(tài)。此阻止是由您的托管提供商故意完成的。即使對(duì)于某些專用服務(wù)器也是如此。當(dāng)這些端口被阻止時(shí),請(qǐng)嘗試使用端口 2525 進(jìn)行連接。如果您發(fā)現(xiàn)該端口也被阻止,那么唯一的解決方案就是聯(lián)系您的托管提供商以解除對(duì)這些端口的阻止。

大多數(shù)托管提供商都會(huì)阻止這些電子郵件端口,以保護(hù)其網(wǎng)絡(luò)免于發(fā)送任何垃圾郵件。

使用端口 25 或 587 進(jìn)行普通/TLS 連接,使用端口 465 進(jìn)行 SSL 連接。對(duì)于大多數(shù)用戶,建議使用端口 587 以避免某些托管提供商設(shè)置的速率限制。

不要使用錯(cuò)誤抑制運(yùn)算符

當(dāng)錯(cuò)誤抑制運(yùn)算符 @ 被添加到 PHP 中的表達(dá)式之前,該表達(dá)式可能生成的任何錯(cuò)誤消息都將被忽略。在某些情況下,需要使用此運(yùn)算符,但發(fā)送郵件不是其中之一。

如果您的代碼包含@mail(...),那么您可能隱藏了有助于您調(diào)試的重要錯(cuò)誤消息。刪除@并查看是否報(bào)告任何錯(cuò)誤。

僅當(dāng)您使用error_get_last() 緊接著具體失敗。

檢查mail()返回值

mail() 函數(shù):

這一點(diǎn)值得注意,因?yàn)椋?/p>

  • 如果您收到 FALSE 返回值,您就知道錯(cuò)誤在于您的服務(wù)器接受您的郵件。這可能不是編碼問題,而是服務(wù)器配置問題。您需要與系統(tǒng)管理員聯(lián)系以找出發(fā)生這種情況的原因。
  • 如果您收到 TRUE 返回值,并不意味著您的電子郵件一定會(huì)發(fā)送。這僅意味著電子郵件已通過 PHP 成功發(fā)送到服務(wù)器上相應(yīng)的處理程序。還有更多 PHP 無法控制的故障點(diǎn)可能導(dǎo)致電子郵件無法發(fā)送。

因此,FALSE 將幫助您指明正確的方向,而 TRUE 并不一定意味著您的電子郵件已成功發(fā)送。值得注意的是!

確保您的托管提供商允許您發(fā)送電子郵件并且不限制郵件發(fā)送

許多共享網(wǎng)絡(luò)主機(jī),尤其是免費(fèi)網(wǎng)絡(luò)主機(jī)提供商,要么不允許從其服務(wù)器發(fā)送電子郵件,要么限制在任何給定時(shí)間段內(nèi)可以發(fā)送的數(shù)量。這是因?yàn)樗麄兣ο拗评]件發(fā)送者利用其更便宜的服務(wù)。

如果您認(rèn)為您的主機(jī)有電子郵件限制或阻止發(fā)送電子郵件,請(qǐng)查看他們的常見問題解答,看看他們是否列出了任何此類限制。否則,您可能需要聯(lián)系他們的支持人員,以驗(yàn)證發(fā)送電子郵件是否存在任何限制。

檢查垃圾郵件文件夾;防止電子郵件被標(biāo)記為垃圾郵件

通常,由于各種原因,通過 PHP(和其他服務(wù)器端編程語言)發(fā)送的電子郵件最終會(huì)進(jìn)入收件人的垃圾郵件文件夾。在對(duì)代碼進(jìn)行故障排除之前,請(qǐng)務(wù)必檢查那里。

為了避免通過 PHP 發(fā)送的郵件被發(fā)送到收件人的垃圾郵件文件夾,您可以在 PHP 代碼中或其他方面執(zhí)行多種操作,以最大程度地減少電子郵件被標(biāo)記為垃圾郵件的機(jī)會(huì)。 Michiel de Mare 提供的好建議包括:

有關(guān)此主題的詳細(xì)信息,請(qǐng)參閱如何確保以編程方式發(fā)送的電子郵件不會(huì)自動(dòng)標(biāo)記為垃圾郵件?。

確保提供所有郵件標(biāo)頭

如果郵件缺少“發(fā)件人”和“回復(fù)”等通用標(biāo)頭,某些垃圾郵件軟件將拒絕郵件:

$headers = array("From: from@example.com",
    "Reply-To: replyto@example.com",
    "X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);

確保郵件標(biāo)頭沒有語法錯(cuò)誤

無效的標(biāo)頭與沒有標(biāo)頭一樣糟糕。一個(gè)不正確的字符就可能使您的電子郵件脫軌。請(qǐng)仔細(xì)檢查以確保您的語法正確,因?yàn)?PHP 不會(huì)為您捕獲這些錯(cuò)誤。

$headers = array("From from@example.com", // missing colon
    "Reply To: replyto@example.com",      // missing hyphen
    "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
);

不要使用虛假的發(fā)件人:發(fā)件人

雖然郵件必須有發(fā)件人:發(fā)件人,但您不能只使用任何值。特別是用戶提供的發(fā)件人地址是阻止郵件的可靠方法:

$headers = array("From: $_POST[contactform_sender_email]"); // No!

原因:您的網(wǎng)絡(luò)或發(fā)送郵件服務(wù)器未列入 SPF/DKIM 白名單,無法假裝對(duì) @hotmail 或 @gmail 地址負(fù)責(zé)。它甚至可能會(huì)默默地丟棄未配置的 From: 發(fā)件人域的郵件。

確保收件人值正確

有時(shí),問題就像電子郵件收件人的值不正確一樣簡單。這可能是由于使用了不正確的變量。

$to = 'user@example.com';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to

測試此問題的另一種方法是將收件人值硬編碼到 mail() 函數(shù)調(diào)用中:

mail('user@example.com', $subject, $message, $headers);

這可以應(yīng)用于所有 mail() 參數(shù)。

發(fā)送到多個(gè)帳戶

為了幫助排除電子郵件帳戶問題,請(qǐng)將您的電子郵件發(fā)送到不同電子郵件提供商的多個(gè)電子郵件帳戶。。如果您的電子郵件未到達(dá)用戶的 Gmail 帳戶,請(qǐng)將相同的電子郵件發(fā)送到 Yahoo 帳戶、Hotmail 帳戶和常規(guī) POP3 帳戶(例如您的 ISP 提供的電子郵件帳戶)。

如果電子郵件到達(dá)所有或部分其他電子郵件帳戶,則您知道您的代碼正在發(fā)送電子郵件,但電子郵件帳戶提供商可能出于某種原因阻止了它們。如果電子郵件未到達(dá)任何電子郵件帳戶,則問題很可能與您的代碼有關(guān)。

確保代碼與表單方法匹配

如果您已將表單方法設(shè)置為 POST,請(qǐng)確保使用 $_POST 查找表單值。如果您已將其設(shè)置為 GET 或根本沒有設(shè)置,請(qǐng)確保使用 $_GET 查找表單值。

確保您的表單action值指向正確的位置

確保您的表單 action 屬性包含指向您的 PHP 郵件代碼的值。


確保網(wǎng)絡(luò)主機(jī)支持發(fā)送電子郵件

某些網(wǎng)絡(luò)托管提供商不允許或啟用通過其服務(wù)器發(fā)送電子郵件。造成這種情況的原因可能有所不同,但如果他們禁止發(fā)送郵件,您將需要使用替代方法,即使用第三方為您發(fā)送這些電子郵件。

發(fā)送給他們的技術(shù)支持的電子郵件(在訪問他們的在線支持或常見問題解答之后)應(yīng)該澄清您的服務(wù)器上是否可以使用電子郵件功能。

確保已配置 localhost 郵件服務(wù)器

如果您使用 WAMP、MAMP 或 XAMPP 在本地工作站上進(jìn)行開發(fā),則您的工作站上可能未安裝電子郵件服務(wù)器。如果沒有,PHP 默認(rèn)無法發(fā)送郵件。

您可以通過安裝基本的郵件服務(wù)器來克服這個(gè)問題。對(duì)于 Windows,您可以使用免費(fèi)的 Mercury Mail

您還可以使用 SMTP 發(fā)送電子郵件。請(qǐng)參閱來自 這個(gè)很棒的答案 >Vikas Dwivedi 了解如何執(zhí)行此操作。

啟用 PHP 的自定義 mail.log

除了 MTA 和 PHP 的日志文件之外,您還可以啟用 專門記錄 mail() 函數(shù)。它不記錄完整的SMTP交互,但至少記錄了函數(shù)調(diào)用參數(shù)和調(diào)用腳本。

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

參見http://php.net/manual/en/mail.configuration.php 了解詳細(xì)信息。 (最好在 php.ini.user.ini.htaccess 中啟用這些選項(xiàng)。)

檢查郵件測試服務(wù)

您可以使用各種傳送和垃圾郵件檢查服務(wù)來測試您的 MTA/網(wǎng)絡(luò)服務(wù)器設(shè)置。通常,您將郵件探測發(fā)送到:他們的地址,然后獲取遞送報(bào)告和更具體的故障或稍后分析:

使用不同的郵件程序

PHP 的內(nèi)置 mail() 函數(shù)很方便,通??梢酝瓿晒ぷ?,但它 有其缺點(diǎn)。幸運(yùn)的是,有一些替代方案可以提供更強(qiáng)大的功能和靈活性,包括處理上述許多問題:

所有這些都可以與專業(yè)的 SMTP 服務(wù)器/服務(wù)提供商結(jié)合使用。 (因?yàn)榈湫偷?08/15 共享虛擬主機(jī)計(jì)劃在電子郵件設(shè)置/可配置性方面時(shí)好時(shí)壞。)

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage