<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com';
    $to = 'contact@yoursite.com';
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) {
            echo '<p>Your message has been sent!</p>';
        } else {
            echo '<p>Something went wrong, go back and try again!</p>';
        }
    }
?>

我试着创建了一个简单的邮件表单。表单本身在我的index.html页面上,但它提交到一个单独的“感谢您的提交”页面thanks . PHP,其中嵌入了上述PHP代码。 代码完美地提交,但从未发送电子邮件。我该如何解决这个问题?


当前回答

以我为例,这封电子邮件发送得很好,但却很难收到,因为整个信息在一行中超过998个字符。我需要使用以下行使最大长度为70的行:wordwrap($email_message, 70, "\r\n");。

https://www.rfc-editor.org/rfc/rfc5322#section-2.1.1

该规范对一行中的字符数量有两个限制。每行字符必须不超过998个字符,不超过78个字符,不包括CRLF字符。

其他回答

如果只使用mail()函数,则需要完成配置文件。

您需要打开邮件扩展,并设置SMTP smtp_port等,最重要的是,设置您的用户名和密码。没有它,邮件就无法发送。此外,您还可以使用PHPMail类来发送。

总是尝试在邮件函数中发送标题。 如果您通过localhost发送邮件,则执行SMTP设置以发送邮件。 如果您通过服务器发送邮件,请检查您的服务器上是否启用了电子邮件发送功能。

这只会影响一小部分用户,但我希望为这一小部分用户记录它。由于这个问题,这个成员花了6个小时对一个正常工作的PHP邮件脚本进行故障排除。

如果你要去一所从www.AceITLab.com运行XAMPP的大学,你应该知道我们的教授没有告诉我们的事情:AceITLab防火墙(不是Windows防火墙)在XAMPP中阻止MercuryMail。你必须使用另一种邮件客户端,pear为我们工作。你必须发送到一个低安全设置的Gmail帐户。

是的,我知道,这在现实世界的电子邮件中完全没有用。然而,据我所知,学术环境和现实世界往往没有什么宝贵的共同点。

对于那些不想使用外部邮件并且希望在专用的Linux服务器上使用mail()的人。

PHP如何发送邮件,详见PHP .ini中[邮件函数]一节。

参数sendmail-path描述如何调用sendmail。默认值是sendmail -t -i,因此如果您在Linux控制台中得到一个正常工作的sendmail -t -i < message.txt,那么您就完成了。您还可以将mail.log添加到调试中,并确保真正调用了mail()。

不同的mta可以实现sendmail。它们只是在这个名称上创建一个符号链接到它们的二进制文件。例如,在Debian中,默认是后缀。配置MTA以发送邮件并从控制台使用sendmail -v -t -i < message.txt进行测试。文件message.txt应该包含消息的所有头和正文,信封的目的地址将从To:头中获取。例子:

From: myapp@example.com
To: mymail@example.com
Subject: Test mail via sendmail.

Text body.

我更喜欢使用smtp作为MTA,因为它简单,不需要运行开放端口的守护进程。smtp仅适用于从本地主机发送邮件。它还可以通过公共邮件服务通过您的帐户发送经过认证的电子邮件。安装ssmtp,编辑配置文件/etc/ssmtp/ssmtp.conf。配置/etc/ssmtp/revaliases文件也能够接收本地系统邮件到Unix帐户(例如,从cron作业到root的警报)。

以下是我在Yandex邮箱上的账户配置:

root=mymail@example.com
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
AuthUser=abcde@yandex.ru
AuthPass=password
<?php

$to       = 'name@example.com';
$subject  = 'Write your email subject here.';
$message  = '
<html>
<head>
<title>Title here</title>
</head>
<body>
<p>Message here</p>
</body>
</html>
';

// Carriage return type (RFC).
$eol = "\r\n";

$headers  = "Reply-To: Name <name@example.com>".$eol;
$headers .= "Return-Path: Name <name@example.com>".$eol;
$headers .= "From: Name <name@example.com>".$eol;
$headers .= "Organization: Hostinger".$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-type: text/html; charset=iso-8859-1".$eol;
$headers .= "X-Priority: 3".$eol;
$headers .= "X-Mailer: PHP".phpversion().$eol;


mail($to, $subject, $message, $headers);

发送HTML电子邮件 在发送电子邮件时,您可以指定Mime版本、内容类型和字符集来发送HTML电子邮件。

例子 上面的例子将发送一个HTML电子邮件消息到name@example.com。您可以对这个程序进行编码,使其能够接收来自用户的所有内容,然后发送电子邮件。