【问题标题】:Sending e-mail from a local host从本地主机发送电子邮件
【发布时间】:2016-07-22 09:36:22
【问题描述】:

我正在尝试从 localhost 发送电子邮件,而我正在使用的程序是 MAMP。我在网上查了这个,写了所有的东西,但这仍然行不通。我在我的 PHP 文件中输入的发送电子邮件的函数是:

mail(
     $admin_email, $messaage,
     'Works!',


    'An email has been generated from your localhost, congratulations!');

此外,我已经填写了所有发送邮件的值,如下所示:

smtp_server=smtp.gmail.com
; smtp port (normally 25)

smtp_port=25
smtp_ssl=ssl
auth_username=****@gmail.com
auth_password=*******

hostname=localhost

显然 - 我的电子邮件和密码是使用我的电子邮件和密码填写的。我还修改了 php.ini 文件,如下所示:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;http://php.net/sendmail-path
sendmail_path = C:\Windows\System32\sendmail\ -t -i -f   my_email@gmail.com

谁能告诉我我的错误在哪里?

【问题讨论】:

  • 如果您从家庭网络运行此功能,则您的 ISP 可能会阻止发往端口 25 的出站流量作为反垃圾邮件措施。只需将您的 smtp_port=25 更改为通常不会被阻止的备用 SMTP 端口 587:smtp_port=587
  • 我试过这个......仍然无法正常工作:(
  • 也尝试注释掉 ssl

标签: php email mamp local host


【解决方案1】:

您将无法通过 Google 的 SMTP 服务器进行发送,因为 mail() 函数不执行 SSL or TLS authentication, which is required。有关更多信息,请参阅this answer。您应该考虑改用 PHPMailer 类。

另外,请注意您错误地使用了mail()。你有

mail(
 $admin_email, $messaage,
 'Works!',
'An email has been generated from your localhost, congratulations!');

第二个参数应该是主题,第三个应该是消息。第四个参数是可选的,应该包含额外的邮件头:

additional_headers(可选)

要插入到电子邮件标题末尾的字符串。

这通常用于添加额外的标题(发件人、抄送和密送)。多个额外的标头应该用 CRLF (\r\n) 分隔。如果使用外部数据构成此标头,则应对数据进行清理,以免注入不需要的标头。

它不适用于您正在使用的纯文本消息。通过在应有格式正确的标头处添加纯文本,您可能会破坏某些服务器和某些邮件阅读器。

【讨论】:

    【解决方案2】:

    如果你使用smtp_port=25你必须改变smtp_ssl=none或者使用这个

    smtp_port=587
    smtp_ssl=tls
    

    您是否从您的 gmail 帐户更改了这些设置

    访问您的电子邮件帐户。单击齿轮工具 > 设置 > 转发 和 POP/IMAP > IMAP 访问。单击“启用 IMAP”,然后保存您的 变化

    要检查电子邮件,请使用这些代码

    <?php
    $to      = 'myemail@yahoo.com';
    $subject = 'Fake sendmail test';
    $message = 'If we can read this, it means that our fake Sendmail setup works!';
    $headers = 'From: myemail@egmail.com' . "\r\n" .
               'Reply-To: myemail@gmail.com' . "\r\n" .
               'X-Mailer: PHP/' . phpversion();
    
    if(mail($to, $subject, $message, $headers)) {
        echo 'Email sent successfully!';
    } else {
        die('Failure: Email was not sent!');
    }
    ?>

    【讨论】:

    • 检查我使用的 Sendmail 路径 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
    猜你喜欢
    • 2013-04-16
    • 2014-10-25
    • 2013-10-01
    • 2010-12-19
    • 2011-10-31
    • 2014-01-10
    相关资源
    最近更新 更多