2014-10-04 150 views
0

請在將此標記爲重複項之前閱讀。我已經嘗試了一切!SMTP連接超時PHP電子郵件

我一直在嘗試使用之前使用過的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 = '[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

回答

1

那麼它可能是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