SMTP连接超时PHP电子邮件

问题描述:

请在将此标记为重复项之前阅读。我已经尝试了一切!SMTP连接超时PHP电子邮件

我一直在尝试使用之前使用过的SwiftMailer和PHPMailer从我的网站表单发送电子邮件。出于某种原因,在过去的几天里,我没有得到他们的工作。每次,无论设置如何,我都会收到错误110 - 连接超时到smtp服务器。我尝试使用我的gmail帐户和1and1.com电子邮件帐户进行身份验证。我甚至还使用fsockopen和gmail添加了一个支票,godaddy也不会和1and1的smtp服务器连接。我甚至曾打电话给1and1两次,询问有关防火墙和任何会阻止我的电子邮件的事情,他们说他们不知道问题可能出在哪里。我已经尝试了多个*问题中列出的所有内容,但无法解决此问题。有什么事情会阻止这个吗?我的互联网连接(尝试在家和工作)也许?我很失落!我的PHPMailer和SwiftMailer代码将粘贴在下面。请记住,我已经尝试使用端口465/ssl和端口587/tls,都没有工作。

require 'PHPMailerAutoload.php'; 

$mail = new PHPMailer(); 
$mail->isSMTP(); 
$mail->Host = 'smtp.example.com'; 
$mail->Port = 465; 
$mail->SMTPAuth = true; 
$mail->Username = '[email protected]'; 
$mail->Password = 'password'; 
$mail->SMTPSecure = 'ssl'; 
$mail->From = '[email protected]'; 
$mail->addAddress('[email protected]'); 
$mail->isHTML(true); 

$checkconn = fsockopen($mail->Host, $mail->Port, $errno, $errstr, 5); 

if($_GET['formName'] == 'join') 
{ 
    $text = 'Name: <b>' . $_POST['first_name_join']. " " .$_POST['last_name_join']. "</b>". 
      "<br>Phone: <b>".$_POST['phone_join']. "</b>". 
      "<br>Email: <b>".$_POST['email_join']. "</b>". 
      "<br>Date of Birth: <b>".$_POST['birth_month']. "/" .$_POST['birth_day']. "/" .$_POST['birth_day']. "</b>". 
      "<br>Message: <br><b>".$_POST['message_join']. "</b>"; 
} 
else 
{ 
    $text = 'Name: <b>' . $_POST['full_name_sponsor']. "</b>". 
      "<br>Company/Organization: <b>" . $_POST['company_sponsor']. "</b>". 
      "<br>Phone: <b>".$_POST['phone_sponsor']. "</b>". 
      "<br>Email: <b>".$_POST['email_sponsor']. "</b>". 
      "<br>Message: <br><b>".$_POST['message_sponsor']. "</b>"; 
} 



$mail->Subject = $_GET['formName'] == 'join' ? 'Join Inquiry' : 'Sponsorship Inquiry' ; 
$mail->Body = $text; 

if (!$checkconn) 
{ 
    echo "($errno) $errstr\n\n"; 
} 
if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

require_once 'swiftmailer/swift_required.php'; 


// Create the Transport 
$transport = Swift_SmtpTransport::newInstance('smtp.example.com', 587) 
    ->setUsername('[email protected]') 
    ->setPassword('password'); 


// Create the Mailer using your created Transport 
$mailer = Swift_Mailer::newInstance($transport); 

if($_GET['formName'] == 'join') 
{ 
    $text = 'Name: <b>' . $_POST['first_name_join']. " " .$_POST['last_name_join']. "</b>". 
      "<br>Phone: <b>".$_POST['phone_join']. "</b>". 
      "<br>Email: <b>".$_POST['email_join']. "</b>". 
      "<br>Date of Birth: <b>".$_POST['birth_month']. "/" .$_POST['birth_day']. "/" .$_POST['birth_day']. "</b>". 
      "<br>Message: <br><b>".$_POST['message_join']. "</b>"; 
} 
else 
{ 
    $text = 'Name: <b>' . $_POST['full_name_sponsor']. "</b>". 
      "<br>Company/Organization: <b>" . $_POST['company_sponsor']. "</b>". 
      "<br>Phone: <b>".$_POST['phone_sponsor']. "</b>". 
      "<br>Email: <b>".$_POST['email_sponsor']. "</b>". 
      "<br>Message: <br><b>".$_POST['message_sponsor']. "</b>"; 
} 

// Create a message 
$subject = $_GET['formName'] == 'join' ? 'Join Inquiry' : 'Sponsorship Inquiry' ; 
$message = Swift_Message::newInstance($subject) 
    ->setFrom(array('[email protected]')) 
    ->setTo(array('[email protected]')) 
    ->setBody($text, 'text/html'); 

// Send the message 
$result = $mailer->send($message); 
+0

你试过重启apache吗? – talsibony 2014-10-04 19:11:44

+0

我没有使用localhost。我其实已经将网站上传到我的1and1服务器。 – 2014-10-04 19:37:05

+0

您应该从服务器上的shell中尝试'telnet mail.example.com 25'以消除PHP配置。 – Synchro 2014-10-04 20:16:17

那么它可能是ISP阻断SMTP的情况下。而且我知道我没有提供直接的解决方案。尝试使用其他服务通过API发送邮件并不会造成任何负面影响,从而完全消除了SMTP。
我对MailgunMandrill有很好的体验。他们都有扩展文档和PHP SDK for API,也可以通过SMTP使用。
祝愿。

+0

在发送完这15个小时后,我决定使用Mailgun,并且完美无缺。我最终发现的是,2010年发生了一些PHP问题,其中'''fsockopen'''无法连接到smtp,并在2012年遇到了其他问题。我尝试了gmail,1and1.com,godaddy,雅虎和live.com的smtp连接,所有这些都超时了。以下是有关问题的链接https://bugs.php.net/bug.php?id=50953(2010)http://forums.phpfreaks.com/topic/269710-fsockopen-time-out-issue-with -gmail-smtp /(2012) – 2014-10-05 10:21:50