2012-05-16 81 views
7

SwiftMail不發送我的電子郵件,而mail()確實有效。與here相同。SwiftMailer不發送郵件,爲什麼?

我添加了EchoLogger,但它不打印任何東西。

$message = Swift_Message::newInstance(); 
$message->setSubject('Test'); 
$message->setTo($email); 
$message->setFrom(ABSENDER); 
$message->setBody($nl_text); 

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

$logger = new Swift_Plugins_Loggers_EchoLogger(); 
$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger)); 

$result = $mailer->send($message, $failures); 
var_dump($failures); 

該電子郵件返回$failures但爲什麼?

更新

Swift_Transport_SimpleMailInvoker::mail我甩出來的參數,並得到了這一點:我在mail()使用

$headers => 
    string(208) "Message-ID: <[email protected]> 
Date: Wed, 16 May 2012 14:57:44 +0200 
From: [email protected] 
MIME-Version: 1.0 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 
" 
    $extraParams => 
    string(15) "[email protected]" 

$to, $subject, $body是一樣的。仍然不知道問題是什麼。

更新#2

這對我來說工作得很好:

mail($email, 'Test', $nl_text, "From: " . ABSENDER); 

免責聲明:這不是一個解決方案,但我用的解決方法,因爲我沒有到調試的時間該框架並找到一個真正的解決方案。隨意使用上面提供的信息進行調試,並在此處發佈您的解決方案。我會很樂意接受並讚揚它。

+0

你能找到解決辦法嗎? – KutePHP

+0

我的解決方案是用一個簡單的'mail($ email,'Anmeldung',$ nl_text,「From:」。ABSENDER)替換它;'但它不能解決問題,所以我拖下了選票並最終刪除了我的答案。這個問題需要一些調試,但我沒有時間。 – PiTheNumber

+0

不錯,你應該把它作爲答案。 – PiTheNumber

回答

5

我有同樣的問題。

根據默認的文檔swiftmailer.org Swift_MailTransport ::的newInstance()使用參數-f%s,這就是爲什麼你有"[email protected]",解決-f %s之間的地方空白。

您的代碼現在可以如下所示: $message = Swift_Message::newInstance('-f %s');

我解決了這個問題,簡單地將null傳遞給__construct()。所以我的工作代碼如下所示:

$message = Swift_Message::newInstance(null);

我希望它能幫助別人。

P.S.我使用Postfix發送電子郵件。

7

我建議你使用調試器,並通過send()後面的代碼步驟。

如果你不能使用調試器,你應該看看中的函數mail。使用閉鎖操作符('@')調用內部郵件功能。也許刪除這個操作符會顯示錯誤信息。您也可以使用var_dump()轉儲在此處傳遞的參數。

2

看起來您正在使用默認的傳輸機制,默認情況下,它使用according to their docs使用mail()。採用這種傳輸時

嚴重的缺點是:

  • 不可預知的消息標題關於傳遞失敗的反饋
  • 缺乏
  • 缺乏對於需要實時傳遞反饋幾個插件支持

source

如果我正在調試這個,我會發現SwiftMailer的mail()函數的實現並轉儲它傳遞的參數,並將它們與您自己的工作版本mail()進行比較。我沒有任何SwiftMailer的經驗,但這看起來像是一個快速的選擇。

+0

我做到了(請參閱更新)。儘管如此,我仍然認爲我會直接使用郵件。感謝您的努力! – PiTheNumber

+1

你已經消除了罪犯在$ to,$ subject或$ body中的可能性。使用SwiftMailer製作的完全相同的標題(你不應該收到電子郵件)。然後,逐個刪除每個頭並重新測試,直到找到導致其失敗的頭或頭。如有必要,重複$ extraParams。從那裏你就會知道具體問題是什麼,並且有能力搜索比'mail()'更好的解決方案。:) –

6

我能修復它。我在標題中使用[email protected],並且未創建此電子郵件帳戶。我創建了[email protected],我的電子郵件開始工作。我希望這有助於某人。

+1

有趣的是,這對我很有用。在from欄目中不存在的電子郵件地址將不會被髮送 – kakoma

+1

是的 - (很長一段時間Swift用戶在這裏)非常討厭它沒有錯誤沒有錯誤沒有一個有效的「回覆」 – anoldermark

1

問題出在Swift_Transport_MailTransport, private $_extraParams = '-f%s'

標記'-f'(請參閱您的代碼:string(15) "[email protected]")在某些情況下會失敗。代碼點火器有相同的「錯誤」。

+0

謝謝,你可以添加微粒信息?它什麼時候失敗?鏈接到代碼點火器錯誤,...現在,這並不能解釋問題是什麼,也無法解決問題。 – PiTheNumber

-2

這可能是真的老了,有同樣的問題,我解決它時,使用更短電子郵件。似乎是@符號後的最大長度是10.這是我迄今測試過的。

例如:

$sname = '[email protected]'; 
->setFrom(array($sname => 'Some Header Title here')); 
0

我發現在symfony的,如果我只是用「退出()」爲例,swiftmailer將不會發送郵件退出功能,但如果我

回新的響應結束();它發送罰款。所以我不確定。