首页 > 解决方案 > 发送包含与收件人相关内容的 laravel 邮件

问题描述

如何发送包含与特定公司相关的产品详细信息的邮件,请参阅以下代码以进行进一步说明:

这是我的 Controller.php 代码:

    foreach ($order->products as $product){
      foreach ([$product->company_email] as $recipient) {
        Mail::to($recipient)->send(new SendCompanyEmail($order));
      }
    }

这是我的 SendCompanyEmail.php 代码:

public function __construct(Order $order)
{
    $this->order = $order;
}

public function build()
{
    return $this->markdown('emails.company-email')
                ->subject('New Order Placed');
}

这是我的 company-email.blade.php 代码:

@foreach($order->products as $product)
    Name: {{ $product->name }}
    Price: {{ $product->price }} USD
    Company Email: {{ $product->company_email }}
@endforeach

我从 2 家不同的公司订购了 2 种产品,我希望向每家公司发送一封包含其产品详细信息的电子邮件。

问题是,当电子邮件发送时,它会发送给两家公司,但会发送我订购的所有产品。

这是输出电子邮件:

至:company1@company1.com

Name:   Product 1
Price:  10.00 USD
Company Email:  company1@company1.com

Name:   Product 2
Price:  12.00 USD 
Company Email:  company2@company2.com

至:company2@company2.com

Name:   Product 1
Price:  10.00 USD
Company Email:  company1@company1.com

Name:   Product 2
Price:  12.00 USD 
Company Email:  company2@company2.com

我真正想要的是将电子邮件发送给两家公司,但要附上各自的产品详细信息。

这是我想要的输出电子邮件:

至:company1@company1.com

Name:   Product 1
Price:  10.00 USD
Company Email:  company1@company1.com

至:company2@company2.com

Name:   Product 2
Price:  12.00 USD 
Company Email:  company2@company2.com

标签: phplaravellaravel-mail

解决方案


您应该按每家公司对您的产品进行分组。

In your controller, do the grouping logic and send for each email an array of products:

$companiesProducts = [];

foreach ($order->products as $product) {
    $companiesProducts[$product->company_email][] = $product;
}

foreach ($companiesProducts as $email => $products) {
    Mail::to($email)->send(new SendCompanyEmail($products));
}

In your email class:

public function __construct($products)
{
    $this->products = $products;
}

public function build()
{
    // pass $this->products to your email view
    return $this->markdown('emails.company-email')
                ->subject('New Order Placed');
}

And in your view file change $order->products to the products parameter you've passed.


推荐阅读