使用GoDaddy托管,我有一个PHP脚本来发送电子邮件。现在,它在大多数情况下都很有效,但有时,它会给我提供消息" SMTP服务器错误:需要身份验证"并且没有发送邮件。
为什么会发生这种情况,有没有办法解决它?
下面是代码:
<?php
if (!class_exists('PHPMailer'))
include("class.phpmailer.php");
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "smtpout.secureserver.net";
$mail->Port = 80;
$mail->SMTPAuth = true;
$mail->Subject = "$subject - $dealer_name";
$mail->Password = "mypassword";
if ($id_dealership == 77)
$mail->Subject = "$subject - $dealer_name (Unassigned) - $website";
else
$mail->Subject = "$subject - $dealer_name";
if ($id_dealership == 30 || $id_dealership == 146)
{
$from_email = 'myemail1@domain.com';
$from_email2 = 'myemail2@domain.com';
}
else if ($id_dealership == 207)
{
$from_email = 'myemail3@domain.com';
$from_email2 = 'myemail4@domain.com';
}
else
{
$from_email = 'myemail5@domain.com';
$from_email2 = 'myemail6@domain.com';
}
$mail->Username = $from_email;
$mail->setFrom($from_email, 'Our Company');
$mail->AddAddress($from_email);
if ($id_dealership == 159)
$mail->Body = $msg_xml2;
else if ($id_dealership == 83)
$mail->Body = $msg_xml;
else
$mail->Body = $msg;
foreach ($dealer_email as $k => $v)
{
$v = trim($v);
$mail->AddAddress($v);
}
if (!$mail->send())
{
$mail->Username = $from_email2;
$mail->setFrom($from_email2, 'Our Company');
$mail->ClearAllRecipients();
foreach ($dealer_email as $k => $v)
{
$v = trim($v);
$mail->AddAddress($v);
}
$mail->AddAddress($from_email2);
if (!$mail->send())
{
mail('myemail@gmail.com', 'Mail not sent to dealer '.$id_dealership, "lead id ".$id_lead."\n\nError: ".$mail->ErrorInfo, 'From: ourcompany@domain.com');
}
}
?>
注意:所有$ from_email使用的密码都相同。
答案 0 :(得分:0)
像@Abhi一样,Beckert说,你应该和GoDaddy一起检查。 但是,如果你正在使用&#34; mail()&#34;,你可以尝试检查错误,然后重试发送电子邮件,看看当你收到随机错误时它是否有效。
if (!mail(...)) {
// retry or reschedule for later (or maybe sleep for a couple of seconds)
}
我会给它一个镜头,当你得到一个2-3秒睡眠()之间的错误时,可能尝试4-5次。如果这样做有效,这是一个难看的修复,你可能应该得到更可靠的东西,或者让GoDaddy来解决它。
答案 1 :(得分:0)
没有你的代码,我无法给你答案,但我可以猜到。
我猜您正在使用mail
发送邮件。错误告诉你的是你必须使用smtp并且它必须被授权。这就像服务器发送电子邮件的登录一样。
对于SMTP,您应使用swiftmailer或phpmailer
等库