2017-02-16 95 views
0

考慮採用一組地址並使用郵件功能向每個人發送電子郵件的代碼示例。Laravel 5.4 Mailables將電子郵件地址添加在一起

//In my controller 

$email = new EmailToWinners($sender_name, $letter); 
foreach ($recipients as $recipient){ 
     Mail::to($recipient)->send($email); 
} 

//In my App\Mail\EmailToWinner 

public function build() 
{ 
    return $this->view('emails.winner-email'); 
} 

這些電子郵件都發送得很好,但是當我測試這個時,我注意到了,它將電子郵件堆疊起來。

所以我在日誌中得到這個。

[2017-02-16 15:58:59] local.DEBUG: Message-ID: <[email protected]> 
Date: Thu, 16 Feb 2017 15:58:59 +0000 
Subject: Email To Winner 
From: Example Dev <[email protected]> 
To: [email protected] 
MIME-Version: 1.0 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

[2017-02-16 15:58:59] local.DEBUG: Message-ID: <[email protected]> 
Date: Thu, 16 Feb 2017 15:58:59 +0000 
Subject: Email To Winner 
From: Example Dev <[email protected]> 
To: [email protected], [email protected] 
MIME-Version: 1.0 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

[2017-02-16 15:58:59] local.DEBUG: Message-ID: <[email protected]> 
Date: Thu, 16 Feb 2017 15:58:59 +0000 
Subject: Email To Winner 
From: Example Dev <[email protected]> 
To: [email protected], [email protected], [email protected] 
MIME-Version: 1.0 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

如果你看看電子郵件。第一封電子郵件顯示了 [email protected]

第二個節目,以 [email protected][email protected]

第三個節目[email protected][email protected][email protected]

所以第一個人得到3封電子郵件。

我在做什麼錯?

+0

您對「堆疊電子郵件」意味着什麼up'? – Jerodev

+0

查看日誌中的電子郵件標題。 – ahackney

+0

再次查看你的代碼,應該真的是關於這個問題,你只創建郵件對象一次,然後將郵件發送給用戶,然後再添加'to',另一個'to',等等,因爲它始終是相同的對象,這就是爲什麼你需要在'foreach'中生成它,就像我的評論中提供的那樣,那麼它應該可以工作 – nameless

回答

2

可以傳遞到to方法的用戶集合:

Mail::to($recipients)->send(new EmailToWinners()); 

Lavavel Mail Docs

的到方法接受一個電子郵件地址,用戶實例,或者集合用戶。如果您傳遞一個對象或一組對象,郵件程序將在設置電子郵件收件人時自動使用其電子郵件和名稱屬性,因此請確保這些屬性在您的對象上可用

+0

但我不想發送1封電子郵件給10個人,我想發送10封電子郵件。 – ahackney

+0

@ahackney是的,它應該向10個用戶發送10封電子郵件。從文檔:如果您傳遞對象或對象集合,郵件程序將在設置電子郵件收件人時自動使用其電子郵件和名稱屬性,因此請確保您的對象上提供了這些屬性 –

+0

我對其進行了測試。它發送了1封電子郵件和3個字段。 – ahackney

1

我認爲你需要爲這樣的每個收件人創建一個新的電子郵件對象。

foreach ($recipients as $recipient){ 
     Mail::to('$recipient')->send(new EmailToWinners($sender_name, $letter)); 
} 
+0

試過這個,它發送1封電子郵件給它們。但是,我想每個地址收到1封電子郵件。 1電子郵件= 1贏家 – ahackney

+0

@ahackney你的意思是「每個地址有1封電子郵件」,或者說1封電子郵件給所有人都有什麼區別?你想在每封郵件中提供不同的內容嗎? ($ newsletterMailAdresses爲$ mailAdress)Mail :: to($ mailAdress) - > send(新通訊郵件($ newsletterText,$ mailAdress,$ sellerID)); }'發送一封郵件給註冊郵件的每個用戶 – nameless

+0

我將爲每個用戶提供不同的內容。但現在它只是一樣的電子郵件。但主要問題是,在我的示例中,發送用戶[email protected] 3封電子郵件,[email protected] 2封電子郵件,[email protected] 1封電子郵件。 – ahackney