我正在尝试为客户设置PHPMailer。他有自己的邮件服务器位于某个IP地址。当被要求向我提供通过系统发送电子邮件的信息时,他提供了以下内容:
Host: xx.xxx.x.x
Port: 25
Domain: mydomain.local
Username: myemail@mydomain.local
Password: <myemailpassword>
From: myemail@anotherdomain.xx
(他确认用于外部电子邮件发送)
我尝试通过将参数设置为上面的确切命名来设置PHPMailer。
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "xx.xxx.x.x";
$mail->Port = 25;
$mail->Username = "myemail@mydomain.local";
$mail->Password = <myemailpassword>;
$mail->SetFrom('myemail@anotherdomain.xx', 'Webname');
$mail->[...]
我收到以下错误:
Failed to connect to server (0)
所以我尝试通过telnet
发送电子邮件,以检查它是客户的电子邮件服务器还是PHPMailer设置:
telnet xx.xxx.x.x 25
通过,我已连接到服务器。
helo mydomain.local
我收到'你好'作为答复。这让我相信这可能是错误的PHPMailer设置。
我也尝试不使用SMTP:
$mail->Host = "ssl://xx.xxx.x.x";
$mail->Port = 25;
$mail->Username = "myemail@mydomain.local";
$mail->Password = "password";
$mail->SetFrom('myemail@anotherdomain.xx', 'Webname');
$mail->[...]
再也没有去。我错了吗?我之前只熟悉设置PHPMailer才能使用Gmail,所以我对可能出现的问题感到茫然,因为我使用的是“个人”电子邮件服务器。
答案 0 :(得分:2)
感谢Loadparts的帮助。
我仍然不确定问题是什么,但它似乎已经解决了。它可能来自电子邮件服务器端,因为编码明智,我没有改变任何东西。这是我使用的最终代码。
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Port = 25;
$mail->Host = "xx.xxx.x.x"; // SMTP server
$mail->Username = "myemail@mydomain.local";
$mail->Password = <myemailpassword>;
$mail->From = "myemail@anotherdomain.xx";
$mail->FromName = <Web_Name>;
$mail->AddAddress("email@domain.com");
$mail->Subject = <Subject>;
$mail->AltBody = <Alt_Body>
$mail->WordWrap = 80;
$body = "test message";
$mail->MsgHTML($body);
$mail->IsHTML(true);
$mail->Send();
答案 1 :(得分:1)
我使用的测试功能,我知道在使用PHPMailer时可以100%测试电子邮件服务器。
我不确定你为什么遇到问题,但是尝试使用我的功能(我知道它很麻烦,但它可以解决问题)。只需将所有XXXX替换为您的信息,并确保在同一文件夹中同时包含class.phpmailer.php和class.smtp.php。
<?php
error_reporting(E_ALL);
$toemail = 'XXXX';
$toname = 'XXXX';
$subject = 'Testing Email Sending...';
$bodyhtml = '<H1>yeah</h1>';
$bodytext = 'heres Hoping it works';
$fromemail = 'XXXX';
$fromname = 'XXXX';
var_dump(sendemail($toemail,$toname,$subject,$bodyhtml,$bodytext,$fromemail,$fromname));
function sendemail($toemail,$toname,$subject,$bodyhtml,$bodytext,$fromemail,$fromname)
{
require_once("class.phpmailer.php");
$mail = new phpmailer();
$mail->IsSMTP();
$mail->From = $fromemail;
$mail->FromName = $fromname;
$mail->Host = "XXXX";
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "XXXX"; // SMTP username
$mail->Password = "XXXX"; // SMTP password
$mail->Port="25";
$mail->SMTPDebug=true;
if(strlen($bodyhtml)>0) {
$mail->Body = $bodyhtml;
$mail->IsHTML(true);
}
else if(strlen($bodytext)>0){
$mail->Body = $bodytext;
}
if(strlen($bodytext)>0 && strlen($bodyhtml)>0){
$mail->AltBody = $bodytext;
}
$mail->AddReplyto($fromemail,$fromname);
$mail->Subject = $subject;
// Check if multiple recipients
if(preg_match("/;/",$toemail))
{
$tmp_email=preg_split("/;/",$toemail);
$tmp_contact=preg_split("/;/",$toname);
$mail->AddAddress($tmp_email[0], $tmp_contact[0]);
// echo "<!-- multi email:".$tmp_email[0]." contact:".$tmp_contact[0]." -->\n";
for($j=1;$j<count($tmp_email);$j++)
{
if(preg_match("/\@/",$tmp_email[$j]))
{ $mail->AddCC($tmp_email[$j], $tmp_contact[$j]);
// echo "<!-- multi email cc:".$tmp_email[$j]." contact:".$tmp_contact[$j]." -->\n";
}
}
}
else{
$mail->AddAddress($toemail, $toname);
}
$error= false;
if($mail->Send()){
$error =true;
}
// Clear all addresses and attachments for next loop
$mail->ClearAddresses();
return $error;
}
如果这不起作用,我的第一次尝试将使用端口80 - 通常不会被阻止,然后您可以努力让SSL工作。
PS:因为它是本地域,您可能需要考虑将域添加到/ etc / hosts以确保。
最好的运气!