SMTP连接超时PHP电子邮件


SMTP Connection Timeout PHP Email

请在将其标记为重复之前阅读。我什么都试过了!

我一直在尝试使用我以前使用过的SwiftMailer和PHPMailer从我的网站表单发送电子邮件。出于某种原因,在过去的几天里,我没有让它们工作。每次,无论设置如何,我都会收到错误110-到smtp服务器的连接超时。我已经尝试使用我的gmail帐户和1and1.com电子邮件帐户的身份验证。我甚至添加了一个使用fsockopen和gmail的检查,godaddy和1and1的smtp服务器都可以连接。我甚至打了两次电话给1and1,询问防火墙和任何会阻止我的电子邮件的问题,他们说他们不知道可能是什么问题。我试过了多个Stackoverflow问题上列出的所有问题,但都无法解决。有什么事情可以阻止这种情况发生吗?我的网络连接(尝试过在家和工作)可能吗?我很失落!我的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 = 'inquiry@example.com';
$mail->Password = 'password';
$mail->SMTPSecure = 'ssl';
$mail->From = 'inquiry@example.com';
$mail->addAddress('example@gmail.com');
$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('inquiry@example.com')
    ->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('inquiry@example.com'))
  ->setTo(array('example@gmail.com')) 
  ->setBody($text, 'text/html');
// Send the message
$result = $mailer->send($message);

这可能是ISP阻塞SMTP的情况。我知道我并没有给出一个直接的解决方案。尝试其他服务通过API发送邮件不会有什么害处,从而完全消除了SMTP
我对Mailgun和Mandrill有很好的经验。它们都有API的扩展文档和PHP SDK,也可以通过SMTP使用
祝福。