2013-08-30 16 views
27

मैं mail.php में 'pretend' => true, निर्धारित करते हैं, इस new.php दृश्य निर्मित:Laravel मेल नाटक प्रिंट कुछ भी नहीं

<body> 
    <div> 
     E-mail: {{ $user->email }}<br> 
     User: {{ $user->username }}<br> 
     Pass: {{ $user->password }}<br> 
    </div> 
</body> 

तब मेरे नियंत्रक में मैं इस कोड का उपयोग मेल "भेजें" करने के लिए:

$data['user'] = $user; 
Mail::send('emails.new', $data, function($message) use ($user) 
{ 
    $message->to('[email protected]', $user->username)->subject('Account'); 
}); 

लॉग फ़ाइल में आउटपुट केवल यह है:

[2013-08-30 11:27:56] log.INFO: माई का नाटक l संदेश: [email protected] [] []

मैंने एक पूर्ण HTML दृश्य के साथ प्रयास किया, साथ ही एक और दृश्य जिसमें केवल तार, कोई चर नहीं है, लेकिन आउटपुट समान है।

क्या यह इस तरह काम करना चाहिए? क्या यह पूरे संदेश, शीर्षक, आदि मुद्रित नहीं करना चाहिए? क्या कोड में कोई समस्या है या यह उचित आउटपुट है?

उत्तर

63

आप app/config/mail.php तो कोई मेल कभी भेज दिया जाता है में 'pretend' => true सेट हैं, तो आप लॉग में सिर्फ एक संदेश मिलता है, इस तरह:

[2014-07-17 14:15:07] production.INFO: 
    Pretending to mail message to: [email protected] [] [] 

हालांकि, अगर आप 'pretend' => false छोड़ने के लिए और के बजाय log का उपयोग चालक ('driver' => 'log', लैरवेल 4.2 के बाद उपलब्ध), फिर मेल भेजने की बजाय, आपको लॉग में लिखी गई पूरी मेल सामग्री मिल जाएगी:

[2014-07-17 14:15:14] production.DEBUG: 
    Message-ID: <[email protected]> 

Date: Thu, 17 Jul 2014 14:15:15 +0000 

Subject: Welcome! 
From: Ahmad <[email protected]> 
To: John Smith <[email protected]> 
MIME-Version: 1.0 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 


    Order confirmed! 

[] [] 
+0

मैंने इस प्रविष्टि को' config/local/mail 'में बनाया है .php' और बाएं 'pretend => false'। मुझे वास्तविक आउटपुट अधिक उपयोगी होने लगता है। –

+12

यह एक उत्कृष्ट उत्तर है - 'config/mail.php' – harryg

+0

में एनोटेशन में होना चाहिए ध्यान दें कि लॉग ड्राइवर को लार्वेल 4.2 के रूप में समर्थित किया गया है –

8

लैरावेल मेलर सिस्टम में नाटक का यह सामान्य व्यवहार है। यह आपके संदेश को कहीं भी प्रस्तुत नहीं करेगा, यहां तक ​​कि लॉग में भी नहीं, यह सिर्फ लॉग इन करेगा कि एक मेल संदेश भेजा जाने का नाटक किया गया था। संबंधित स्रोत कोड को देखो:

/** 
* Send a Swift Message instance. 
* 
* @param Swift_Message $message 
* @return void 
*/ 
protected function sendSwiftMessage($message) 
{ 
    if (! $this->pretending) 
    { 
     return $this->swift->send($message); 
    } 
    elseif (isset($this->logger)) 
    { 
     $this->logMessage($message); 
    } 
} 

/** 
* Log that a message was sent. 
* 
* @param Swift_Message $message 
* @return void 
*/ 
protected function logMessage($message) 
{ 
    $emails = implode(', ', array_keys($message->getTo())); 

    $this->logger->info("Pretending to mail message to: {$emails}"); 
} 
+0

कोड से लिंक करें: https://github.com/laravel/framework/blob/master/src/Illuminate/Mail/Mailer।php –

10

आप वास्तव में (उदाहरण के लिए जब परीक्षण उपयोगकर्ता खाता सत्यापन या पासवर्ड ईमेल रीसेट)/भंडारण/लॉग लॉगफ़ाइल में संदेश की सामग्री को देखने के लिए चाहते हैं; आप विक्रेता/laravel/रूपरेखा/src की अपनी स्थानीय प्रतिलिपि संशोधित कर सकते हैं/रोशन/मेल/Mailer.php और में में logMessages ढंग से काम की तरह

protected function logMessage($message) 
{ 
    $emails = implode(', ', array_keys((array) $message->getTo())); 
    $body = $message->getBody(); 
    $this->logger->info("Pretending to mail message to: {$emails} :-: {$body}"); 
} 

देखने के लिए इसे संशोधित तो फिर तुम संदेश के मुख्य भाग देखेंगे लॉग।

+1

आप $ topic = $ message-> getSubject() जोड़कर ईमेल विषय प्राप्त कर सकते हैं; – Duli

+0

नहीं, ऐसा न करें, यह कोर बदल रहा है, नीचे उल्लू (@virtilink) सही है – Juan

+1

बस उत्तर को अपडेट करने के लिए, मैं आपको सलाह देता हूं कि आप इनमें से कोई भी काम न करें। इसके बजाय स्थानीय विकास उद्देश्यों के लिए विशेष रूप से बनाया गया एक स्थानीय एसएमटीपी सर्वर चलाएं: http://mailcatcher.me/ – sirtimbly

6

मैं अपने भेजने कॉलबैक में शामिल हैं:

Mail::send(array('emails.html','emails.text'),$data,function($message) use($data) 
{ 
    //Set $message data 
    if(Config::get('mail.pretend')) Log::info(View::make('emails.html',$data)->render()); 
} 

वैकल्पिक रूप से, आप पास कर सकते हैं विचारों अन्य दृश्य में प्रस्तुत करना एचटीएमएल आपके ब्राउज़र में गाया देखने के लिए।

+0

लार्वेल 4.0.x के लिए बिल्कुल सही जहां 'लॉग' ड्राइवर मौजूद नहीं है – damd

1

मैंने लार्वेल 4.2 के लिए विषय और शरीर को शामिल करने के लिए एक पैकेज बनाया है।

पैकेज यहां पाया जा सकता है: के रूप में यहाँ descripted https://packagist.org/packages/peercode/mail

बस पैकेज सक्षम: https://github.com/peercode-eric/laravel-maillog और लॉग में अतिरिक्त जानकारी शामिल होंगे।

संबंधित मुद्दे