我尝试过以下脚本通过phpmailer发送邮件
<?php
$sendfrm_name = 'Balakumar B';
$sendfrm_id = '[email protected]';
$sendtoname = 'myself';
$sendto = '[email protected]';
//$cc = '';
include("mail/PHPMailerAutoload.php");
include("mail/class.PHPMailer.php");
include("mail/class.smtp.php");
$mail = new PHPMailer;
//$mail-> isSMTP();
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
$mail->SMTPDebug = 2;
$mail-> SMTPAuth = true;
$mail->smtpConnect = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail-> Username = '[email protected]';
$mail-> Password = 'balakumar1`2345';
$mail-> SMTPSecure = 'tls';
$mail-> Port = 465; //587
$mail-> setFrom($sendfrm_id, $sendfrm_name);
$mail-> addAddress($sendto, $sendtoname);
$mail-> addReplyTo($sendto, $sendtoname);
//$mail->addCC($cc);
$mail->WordWrap = 50;
$mail->isHTML(true);
$mail->Subject = "Test Mail";
$mail->Body = "Name: ".$sendfrm_name ."<br /> Email: ".$sendfrm_id;
if(!$mail->send())
{
echo "Mailer Error: ".$mail->ErrorInfo;
}
else
{
echo ("<p>Message successfully sent!</p>");
echo "E-mail: ", $sendto, "<br />";
echo "Name: ", $sendtoname, "<br />";
echo "Subject: Test Mail<br />";
echo "Body: Body Of the Mail<br />";
}
?>
但我收到邮件错误:
无法实例化邮件功能。
如何修复这个错误?上面我提到了我的邮件服务器 (mail.mydomain.com) 和端口 465。
您使用的代码是 php 的默认
mail()
函数。您需要使用 SMTP。
您已禁用 SMTP。
$mail = new PHPMailer;
//$mail-> isSMTP(); <----------- Here it is disabled.
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
$mail->SMTPDebug = 2;
$mail-> SMTPAuth = true;
因为 SMTP 被禁用,所以它正在使用
mail()
功能。您的机器配置不正确。
只需取消注释该行即可。
完整代码在这里:
$mail = new PHPMailer;
$mail-> isSMTP(); # SMTP is enabled now.
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
$mail->SMTPDebug = 2;
$mail-> SMTPAuth = true;
希望这有帮助。
你在这里做了很多错误的事情,我看不出有什么特别的原因。
当您使用自动加载器时,您不需要加载其他类 - 这就是自动加载器的用途。您似乎已将
class.phpmailer.php
的文件名更改为 class.PHPMailer.php
,这是非标准的,在区分大小写的文件系统上会遇到问题,并且在更新库时可能会中断。
如果您不调用
isSMTP()
,您将不会使用 SMTP,因此不会使用任何 SMTP 设置(默认情况下将使用 PHP mail()
函数)。
如果您使用
SMTPSecure = 'tls'
,则需要 Port = 587
,而不是 465。
为什么要禁用证书验证?您应该仅出于非常具体的原因才这样做,而不仅仅是作为“使其发挥作用”的随机措施。它存在安全风险,因此除非绝对必要,否则不要这样做,并且您知道确切的原因 - 如果您不知道,请不要这样做。
无需调用
WordWrap
- 它还表明您的代码基于旧示例,并且可能正在运行旧版本的 PHPMailer,因此 获取最新版本。
为什么要将收件人地址和回复地址设置为相同?