我正在尝试使用PHP发送电子邮件。我有以下代码:
$action=$_REQUEST['action'];
if ($action=="") /* display the contact form */
{
?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="hidden" name="action" value="submit">
Your name:<br>
<input name="name" type="text" value="" size="30"/><br>
Your email:<br>
<input name="email" type="text" value="" size="30"/><br>
Your message:<br>
<textarea name="message" rows="7" cols="30"></textarea><br>
<input type="submit" value="Send email"/>
</form>
<?php
}
else /* send the submitted data */
{
$name=$_REQUEST['name'];
$email=$_REQUEST['email'];
$message=$_REQUEST['message'];
if (($name=="")||($email=="")||($message==""))
{
echo "All fields are required, please fill <a href=\"\">the form</a> again.";
}
else{
$from="From: $name<$email>\r\nReturn-path: $email";
$subject="Message sent using your contact form";
mail("testing@gmail.com", $subject, $message, $from);
echo "Email sent!";
}
}
我填写了缺少的字段,然后点击了提交按钮。该页面显示电子邮件已发送,但当我检查我的电子邮件时,未收到任何电子邮件。我的代码出了什么问题?
答案 0 :(得分:1)
首先检查您的邮件代码是否正常
尝试这样。
if(mail("testing@gmail.com", $subject, $message, $from)){
echo "success";
}else{
echo "fail";
}
并检查这种情况会发出什么信息。
答案 1 :(得分:1)
试试这个工作正常..!
<form action="" method="POST" enctype="multipart/form-data">
<input type="hidden" name="action" value="submit">
Your name:<br>
<input name="name" type="text" value="" size="30"/><br>
Your email:<br>
<input name="email" type="text" value="" size="30"/><br>
Your message:<br>
<textarea name="message" rows="7" cols="30"></textarea><br>
<input type="submit" name="submit" value="Send email"/>
</form>
<?php
if(isset($_POST["submit"])){
$name=$_REQUEST['name'];
$email=$_REQUEST['email'];
$message=$_REQUEST['message'];
if (($name=="")||($email=="")||($message==""))
{
echo "All fields are required, please fill <a href=\"\">the form</a> again.";
}
else{
$from="From: $name<$email>\r\nReturn-path: $email";
$subject="Message sent using your contact form";
mail("testing@gmail.com", $subject, $message, $from);
echo "Email sent!";
}
}
答案 2 :(得分:1)
首先,您应该检查mail
函数的结果,因为它可能会失败并返回false
告诉您,
http://php.net/manual/en/function.mail.php#refsect1-function.mail-returnvalues
所以你需要:
if (mail("testing@gmail.com", $subject, $message, $from)) {
echo "Email sent!";
} else {
echo "Can't send the email!";
}
如果显示Can't send the email
,请检查日志文件,确保:
但如果显示Email sent!
,但仍然无法收到该电子邮件,该怎么办?
好吧,mail
函数会在以下时间返回true
:
邮件已成功接受发送
注意单词*accepted* for delivery
,这意味着:好的,它现在在邮件服务器上,我完成的工作。目前还不确定邮件是否会传达给用户。< / p>
你看,电子邮件系统很复杂。您刚刚“发送”的电子邮件可能会通过多台服务器到达目的地。中间的每个服务器都可以延迟甚至取消运输。
更糟糕的是,您的用户或用户的电子邮件提供商可能会过滤掉您的电子邮件。对于安全措施,他们让您对此一无所知。
即使mail
功能或PHPMailer
返回true
结果,您仍然无法确切知道您的电子邮件是否达到。只有您可以确定的是,邮件将被发送到功能强大的邮件服务器。
在这种情况下:
Gmail
(Google Apps for Work),Outlook
,Yahoo
或SendGrid
https://sendgrid.com/和{{1} }} http://www.mailgun.com