当前位置: 首页 > 知识库问答 >
问题:

PHPMailer-通过SMTP发送电子邮件

李耀
2023-03-14

我使用的PHPMailer表格在这里找到。

从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。

在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码:

$sendToEmail = 'myemail@gmail.com';
$smtpUsername = 'myemail@gmail.com';
$smtpPassword = 'MyPassword';

任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!

<?php
/*
THIS FILE USES PHPMAILER INSTEAD OF THE PHP MAIL() FUNCTION
AND ALSO SMTP TO SEND THE EMAILS
*/

require 'PHPMailer-master/PHPMailerAutoload.php';

/*
*  CONFIGURE EVERYTHING HERE
*/

// an email address that will be in the From field of the email.
$fromEmail = 'demo@domain.com';
$fromName = 'Demo contact form';

// an email address that will receive the email with the output of the form
$sendToEmail = 'myemail@gmail.com';
$sendToName = 'Demo contact form';

// subject of the email
$subject = 'New message from contact form';

// smtp credentials and server

$smtpHost = 'smtp.gmail.com';
$smtpUsername = 'myemail@gmail.com';
$smtpPassword = 'MyPassword';

// form field names and their translations.
// array variable name => Text to appear in the email
$fields = array('name' => 'Name','email' => 'Email', 'message' => 'Message');

// message that will be displayed when everything is OK :)
$okMessage = 'Contact form successfully submitted. Thank you, I will get back 
to you soon!';

// If something goes wrong, we will display this message.
$errorMessage = 'There was an error while submitting the form. Please try again 
later';

/*
*  LET'S DO THE SENDING
*/

// if you are not debugging and don't need error reporting, turn this off by 
error_reporting(0);
error_reporting(E_ALL & ~E_NOTICE);

try
{

if(count($_POST) == 0) throw new \Exception('Form is empty');

$emailTextHtml = "<h1>You have a new message from your contact form</h1><hr>";
$emailTextHtml .= "<table>";

foreach ($_POST as $key => $value) {
    // If the field exists in the $fields array, include it in the email
    if (isset($fields[$key])) {
        $emailTextHtml .= "<tr><th>$fields[$key]</th><td>$value</td></tr>";
    }
}
$emailTextHtml .= "</table><hr>";
$emailTextHtml .= "<p>Have a nice day,<br>Best,<br>Ondrej</p>";

$mail = new PHPMailer;

$mail->setFrom($fromEmail, $fromName);
$mail->addAddress($sendToEmail, $sendToName); // you can add more addresses by 
simply adding another line with $mail->addAddress();
$mail->addReplyTo($from);

$mail->isHTML(true);

$mail->Subject = $subject;
$mail->Body    = $emailTextHtml;
$mail->msgHTML($emailTextHtml); // this will also create a plain-text version 
of the HTML email, very handy


$mail->isSMTP();

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';

//Set the hostname of the mail server
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6
$mail->Host = gethostbyname($smtpHost);

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP 
submission
$mail->Port = 587;

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = $smtpHost;

//Password to use for SMTP authentication
$mail->Password = $smtpPassword;


if(!$mail->send()) {
    throw new \Exception('I could not send the email.' . $mail->ErrorInfo);
}

$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
// $responseArray = array('type' => 'danger', 'message' => $errorMessage);
$responseArray = array('type' => 'danger', 'message' => $e->getMessage());
}


// if requested by AJAX request return JSON response
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);

header('Content-Type: application/json');

echo $encoded;
}
// else just display the message
else {
echo $responseArray['message'];
}

共有1个答案

景俊语
2023-03-14

我怀疑由于使用了gethostbyname,您将收到一个证书验证错误。该调用是配置不正确的网络的一种解决方法,它不会与SMTP STARTTLS结合使用,因为它总是会导致名称不匹配。试着注释掉这一行,并使用smtp.gmail.com作为主机名。

使用PHPMailer提供的gmail示例作为参考,并更新至PHPMailer的最新版本。

 类似资料:
  • 我一直在用代表我的office365帐号发送SMTP邮件,工作了大概一个星期,然后突然不工作了,不知道怎么变了。 当我在PHPMailer中启用high debug logging时,我看到: SMTP- 这篇文章似乎是最相关的: 不接受来自服务器的身份验证:504 5.7.4无法识别的身份验证类型 以下是我交给PHPMailer的文字SMTP设置: 以及实际的PHP代码: 作为理智检查,我在中使

  • 我在ASP. Net Core中工作,并尝试从gmail使用smtp客户端发送电子邮件。有以下代码,但不起作用也看过以下帖子,但不起作用http://dotnetthoughts.net/how-to-send-emails-from-aspnet-core/ 它会跟踪错误 系统NotSupportedException:SMTP服务器不支持身份验证

  • 我通过SMTP服务发送电子邮件时收到以下错误消息: 我的系统上有以下SMTP设置: 操作系统:Windows 7家庭高级版 IIS:IIS 7 如何解决这个问题? 谢谢。

  • 我正在使用PHPmailer发送电子邮件。到目前为止,我成功地将电子邮件发送到一个地址。现在,我想在一次点击中发送多封电子邮件。 问题:我曾尝试使用下面的一些循环发送多封电子邮件,但我输出错误。是的,它发送电子邮件,但只发送到一个地址,并且该电子邮件地址将获取所有应该发送到其他电子邮件的电子邮件。 例如,当我发送17封电子邮件时,这17封电子邮件只发送到一个地址。电子邮件应根据数据库中的地址发送,

  • 我尝试从这个问题设置服务器PHP Ubuntu使用gmail表单发送电子邮件localhost。所以我设置了(帐户)从: /etc/MSMTPC: 现在,当我尝试发送测试电子邮件(以root用户身份执行)时: 给出: 所以日志上写着<代码>

  • 以下代码https://stackoverflow.com/a/3649148一直有效,直到最近谷歌改变了他们的安全政策,它才被打破。 我收到了来自谷歌的邮件 你好,xxx,有人刚刚试图登录你的Google帐户xxx@gmail.com来自不符合现代安全标准的应用程序。 我们强烈建议您使用Gmail等安全应用程序访问您的帐户。Google制作的所有应用程序都符合这些安全标准。另一方面,使用不太安全