2014-07-23 7 views
0

Я пытаюсь использовать Swift Mailer для отправки электронной почты с приложением. Электронная почта не отправляется. Я довольно новичок в PHP, поэтому это может быть простая проблема, но я не могу понять это. Код:Swift Mailer не отправляет письмо

<?php 

require_once 'swift/lib/swift_required.php'; 

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465) 
    ->setUsername('my gmail address') 
    ->setPassword('my gmail password') 
    ; 

$mailer = Swift_Mailer::newInstance($transport); 

$message = Swift_Message::newInstance() 
    ->setSubject('subject') 
    ->setFrom(array('[email protected]' => 'John Doe')) 
    ->setTo(array('[email protected]' => 'Jane Doe')) 
    ->setBody('body') 
    ->attach(Swift_Attachment::fromPath('image.png')) 
    ; 

echo('test 1'); 

$numSent = $mailer->send($message); 

echo('test 2'); 

printf("Sent %d messages\n", $numSent); 

if ($mailer->send($message)) 
{ 
    echo "Sent\n"; 
} 
else { 
    echo "Failed\n"; 
} 
?> 

swift_required.php успешно включается. Мой тест 1 эхо работает, но тест 2 echo никогда не делает. Это заставляет меня думать, что проблема существует в переменной $ numSent. Конечно, проблема все еще очень широкая, но, надеюсь, это немного сужает ситуацию. Кроме того, ни одна из функций ниже $ numSent не работает, поэтому он не говорит мне, отправляется ли моя электронная почта или нет.

Выяснено, что вам нужно использовать 'tls: //smtp.gmail.com'.

+0

Используйте [отладочную информацию, представленную в документации SwiftMailer] (http://swiftmailer.org/docs/sending.html#finding-out-rejected-addresses), а также [SwiftMailer Logger плагин] (http://swiftmailer.org/docs/plugins.html#logger-plugin), чтобы помочь вам сузить проблему. В общем, вам нужно научиться эффективно отлаживать ваш код (из того, что вы написали, похоже, что вы вообще не проводили отладочную работу). – esqew

ответ

0

Если второе эхо не приходит, php должен выйти!

Использование error_reporting (E_ALL) в сочетании с ini_set ('display_errors', 1) и добавить обработчик ошибок, как показано ниже:

set_error_handler(function($severity, $message, $file, $line) 
{ 
    if(!(error_reporting() & $severity)) 
    { 
     return; 
    } 
    throw new ErrorException($message, $severity, $severity, $file, $line); 
}); 

Это заставит даже уведомления бросить исключение в сочетании с E_ALL.

<?php ini_set('display_errors', 1); 
error_reporting(E_ALL); 
//@todo: add the error handler here 
try 
{ 
    //every code in the app must be wrapped in this try statement. 
    //require('file_that_mails_or_whatever.php'); 
} 
catch(Exception $e) 
{ 
    echo $e->getMessage() . '<br>'; 
    echo '<pre>' . $e->getTraceAsString() . '</pre>'; 
} 
+1

Хорошо, я сделал это, но получаю только пустую страницу. Вы знаете, что может вызвать это? – Will

+0

Может случиться так, что отчет display_errors/error переопределяется где-то в другом месте. Есть ли у вас доступ к вашему апашу errorlog? – twicejr

Смежные вопросы