如何使用 phpmailer 从本地主机发送电子邮件?

Posted

技术标签:

【中文标题】如何使用 phpmailer 从本地主机发送电子邮件?【英文标题】:How to send e-mail from localhost with phpmailer? 【发布时间】:2015-04-15 20:22:52 【问题描述】:

好的,我已经尝试了很多次了。结果没有错误,但我的收件箱或垃圾邮件文件夹中没有收到任何电子邮件

这是我的mail.php

    <?php


require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer();
//$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host = "localhost"; // SMTP server
//IsSMTP(); // send via SMTP
$mail->SMTPDebug = true;
$mail->IsSMTP();
$mail->Host     = "smtp.gmail.com"; // SMTP server Gmail
$mail->Mailer   = "gmail";
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = 'tls'; 
$mail->Port = 587;   


$mail->Username = "henrikus.antony@gmail.com"; // 
$mail->Password = "******"; // SMTP password
$webmaster_email = "henrikus.antony@gmail.com"; //Reply to this email ID
$email = "rikunime.share@gmail.com"; // Recipients email ID
$name = "Hendrikus Anthony"; // Recipient's name
$mail->From = $webmaster_email;
$mail->FromName = "Anthony";
$mail->AddAddress($email,$name);
$mail->AddReplyTo($webmaster_email,"Anthony");
$mail->WordWrap = 50; // set word wrap

$mail->Ishtml(true); // send as HTML
$mail->Subject = "Ini adalah Email HTML";
$mail->Body = "Ini adalah email contoh"; //HTML Body
$mail->AltBody = "This is the body when user views in plain text format"; //Text Body 
if(!$mail->Send())

echo "Mailer Error: " . $mail->ErrorInfo;

else

echo "Message has been sent";

?>

拜托了,我真的需要帮助。我需要托管吗?还是我的语法有问题? sendmail.ini 和 php.ini 是否会影响 mail.php?

【问题讨论】:

没有一个答案使用“localhost”,请更改问题的标题。 【参考方案1】:

这是我从几篇文章中找到的解决方案。

<?php

require_once "vendor/autoload.php";

$mail = new PHPMailer;

//Enable SMTP debugging. 
$mail->SMTPDebug = 3;                               
//Set PHPMailer to use SMTP.
$mail->isSMTP();            
//Set SMTP host name                          
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;                          
//Provide username and password     
$mail->Username = "name@gmail.com";                 
$mail->Password = "password";                           
//If SMTP requires TLS encryption then set it
//$mail->SMTPSecure = "tls";                           
//Set TCP port to connect to 
$mail->Port = 587;                                   

$mail->From = "name@gmail.com";
$mail->FromName = "Full Name";

$mail->smtpConnect(
    array(
        "ssl" => array(
            "verify_peer" => false,
            "verify_peer_name" => false,
            "allow_self_signed" => true
        )
    )
);

$mail->addAddress("reciever@ymail.com", "Recepient Name");

$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

if(!$mail->send()) 

    echo "Mailer Error: " . $mail->ErrorInfo;
 
else 

    echo "Message has been sent successfully";

这不需要您的本地主机上的任何服务器设置。

$mail->smtpConnect(
    array(
        "ssl" => array(
            "verify_peer" => false,
            "verify_peer_name" => false,
            "allow_self_signed" => true
        )
    )
); 

这部分代码要求 smtp 不验证任何连接,并且可以在不验证发件人的情况下发送邮件。 您还需要从邮箱设置中启用 IMAP 设置。

这里是参考链接。 https://www.sitepoint.com/sending-emails-php-phpmailer/ https://github.com/PHPMailer/PHPMailer/issues/368#issuecomment-75821110

【讨论】:

谷歌似乎阻止了我这样做,我收到了一个可怕的安全漏洞通知。 好久没试过了。但如果我没记错的话,你必须禁用谷歌邮件上的连接验证。造成这种情况的原因是,在使用本地环境时,邮件服务提供商无法验证 localhost。【参考方案2】:

您需要一个 SMTP 服务器来发送邮件。假设您想将此用于测试目的,请尝试下载免费的 SMTP 本地服务器,例如 this one。

如果您想在生产环境中实际发送邮件,请考虑使用外部服务,例如 SendGrid 或 MailChimp。或者,如果您想坚持使用 SMTP,您需要您自己的网络服务器来发送邮件。

【讨论】:

不能用gmail提供的smtp服务器吗?还是我很困惑? 你是referring to this吗?因为是的,你可以使用它。【参考方案3】:

你不应该注释掉告诉邮件程序使用 smtp 的行,除非你真的想使用普通的邮件功能,我认为你不想这样做

<?php
 require 'PhpMailer/PHPMailerAutoload.php';

//Create a new PHPMailer instance
    $mail = new PHPMailer;   
    $mail->isSMTP();
// change this to 0 if the site is going live
    $mail->SMTPDebug = 2;
    $mail->Debugoutput = 'html';
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';

 //use SMTP authentication
    $mail->SMTPAuth = true;
//Username to use for SMTP authentication
    $mail->Username = "xxxxxx@gmail.com";
    $mail->Password = "******";
    $mail->setFrom('xxx@ww.com', 'Somebody');
    $mail->addReplyTo('xxx@ww.com', 'Somebody');
    $mail->addAddress('xxx@ww.com', 'Somebody');
    $mail->Subject = 'New contact from somebody';
    // $message is gotten from the form
    $mail->msgHTML($message);
$mail->AltBody = $filteredmessage;
    if (!$mail->send()) 
        echo "We are extremely sorry to inform you that your message
could not be delivered,please try again.";
     else 
        echo "Your message was successfully delivered,you would be contacted shortly.";
        
?> 

请注意,您必须连接到互联网才能使用 gmail 的 smtp

【讨论】:

是的,我已连接到互联网。然后当我用您的语法再次尝试时,它说“我们非常抱歉地通知您,您的消息无法传递,请再试一次。” @HenrikusAnthony 我从 13 小时前使用的脚本中删除了这个,我也刚刚再次测试。它工作了,你的连接可能有问题,或者你可以尝试另一个端口,比如 465 ,$mail-&gt;Port = 465;

以上是关于如何使用 phpmailer 从本地主机发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件

如何在没有 SMTP 的情况下从 PHPMAILER 发送电子邮件

如何使用codeigniter从本地主机发送电子邮件?

如何正确地从本地主机发送电子邮件 [关闭]

如何使用带有 XAMPP 的 PHP 从本地主机发送电子邮件?

如何在 PHPMailer 中指定 SMTP 服务器?