如何可靠地发送PHP中的电子邮件?

时间:2010-07-21 08:41:59

标签: php email

我正在学习如何发送电子邮件。我已经安装了appserver和文件 php.ini-dist和php.ini-推荐我做了以下更改

SMTP=localhost

sendmail_from=me@localhost.com

我用mail.ptcl.net替换了localhost,这是我的dsl提供者 并用我的电子邮件地址h_k9@live.com替换了me@localhost.com

我在提交表单时收到以下消息

  

“警告:mail()[function.mail]:   “sendmail_from”未在php.ini中设置或   自定义“From:”标题丢失   C:\的appserv \ WWW \哈姆扎\ send_simpleform.php   第14行以下电子邮件   已发送:

     

Hamza:hamza

     

h_k9@live.com

     

消息:adasdas“

以下是我正在使用的脚本

<html>
<head>
<title>Simple Feedback Form</title>
</head>
<body>
<form method="post" action="send_simpleform.php"/>
<p><strong>Your name</strong><br/>
<input type="text" name="sender_name" size="30" /></p>
<p><strong>Senders Email address</strong><br/>
<input type="text" name="sender_email" size="30" /></p>
<p><strong>Enter your Message here</strong><br/>
<textarea name="message" cols="30" rows="5" wrap="virtual"></textarea></p>
<p><input type="submit" value="send this form" name="submit"/></p>
</form>
</body>
</html>


<?php
if(($_POST[sender_name]=="")||($_POST[sender_email]="")||($_POST[message==""]                                                                                                          ))
{   header("location=simple_form.html");
    exit;
}
$msg="E-MAIL SENT FROM WWW SITE\n";
$msg="Sender's Name:  $_POST[sender_name]\n";
$msg="Sender's E-Mal I.D:    $_POST[sender_email]\n";
$msg="Message:                 $_POST[message]\n";
$to="h_k9@live.com";
$subject="Web site feedback";
$mailholders="from my website<geriadress@yourdomain.com>\n";
$mailheader="Reply-to: $_POST[sender_email]\n";
mail($to, $subject,$msg,$mailheaders);
?>
<html>
<head>
<title>Simple Feedback Form Sent</title>
</head>
<body>
<h1>The following e-mail has been sent:</h1>
<p><strong>Hamza:</strong><br\>
<?php echo "$_POST[sender_name]";?>
<p><strong>h_k9@live.com</strong><br\>
<?php echo "$_POST[sender_email]";?>
<p><strong>Message:</strong><br>
<? echo "$_POST[message]";?>
</body>
</html>

4 个答案:

答案 0 :(得分:2)

我相信你至少有两个问题:

  1. 我猜测php.ini-recommendedphp.ini-dist分别是示例和模板配置文件;对它们的修改可能不会影响当前由PHP实例使用的“真实”php.ini。使用phpinfo()确保您的配置正确无误。
  2. 垃圾邮件过滤器。 Jeff Atwood对于在检查您的电子邮件是否为垃圾邮件时实施服务器执行的检查非常好blog post。别忘了:
  3.   

    仅仅因为您发送电子邮件并不意味着它会到达。

答案 1 :(得分:1)

正如jhinal所指出的那样,你修改过的php.ini文件就是例子。你必须找出php.ini在哪里发布并修改它。

正如其他人所提到的,您可以从标题中设置自定义。但是,如果你没有在php.ini中设置sendmail_from,你必须记住始终设置它。

无论如何,这是一篇关于使用PHP的mail()函数发送电子邮件的相当不错的文章/教程:

http://articles.sitepoint.com/article/advanced-email-php

答案 2 :(得分:0)

使用外部库发送邮件可能更简单,如http://swiftmailer.org/而不是使用php.ini

依赖php.ini是绝对不错的。

答案 3 :(得分:0)

试试这个:这在我的网站上对我有用。

$email = "your e-mail address";
$myname = "name";
$mymail = "reply Address";
    $subject = "SUBJECT LINE";
    $body = "TEXT GOES HERE";
    $headers = "Content-Type: text/plain; charset=us-ascii\nFrom: $myname <$mymail>\n
    Reply-To: <$mymail>\nBCC:<$mymail>\nReturn-Path: <$mymail>\nX-Mailer: PHP";

            //send the email
            if ($email != "") { 
                mail($email,$subject,$body,$headers); 
            }