laravel 多个不同邮箱 给客户发送邮件
-
定义不同的发送邮箱config,如果想安全可以放到env
<?php /** * Created by PhpStorm. * User: Lenovo * Date: 23/3/2021 * Time: 下午4:50 */ return [ //张亚 '18'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281407@qq.com', 'password' => 'mykkpbdqhsuzddic', 'from' => [ 'address' => '2850281407@qq.com', 'name' => '张亚', ], ], //张正山 '23'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281398@qq.com', 'password' => 'bhzwnbbdmbuvqdcgd', 'from' => [ 'address' => '2850281398@qq.com', 'name' => '张正山', ], ], //卢非 '24'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281398@qq.com', 'password' => 'bhzwnprhyuvqdcgd', 'from' => [ 'address' => '2850281398@qq.com', 'name' => '卢非', ], ], //胡婕 '25'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281423@qq.com', 'password' => 'ucawqrtyboxidhaa', 'from' => [ 'address' => '2850281423@qq.com', 'name' => '胡婕', ], ], //张云 '26'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281420@qq.com', 'password' => 'jjwfryuimmjmdfdc', 'from' => [ 'address' => '2850281420@qq.com', 'name' => '张云', ], ], //王娟 '28'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2850281406@qq.com', 'password' => 'xgxhertcmcypdfdc', 'from' => [ 'address' => '2850281406@qq.com', 'name' => '王娟', ], ], //章美 '27'=> [ 'host' => 'smtp.qq.com', 'port' => 465, 'username' => '2881759484@qq.com', 'password' => 'hcwbuiopkfgtsdfbh', 'from' => [ 'address' => '2881759484@qq.com', 'name' => '章美', ], ], ];
2.生成可邮寄类
php artisan make:mail SendPrice
所有的可邮寄类配置都在 build 方法中完成,在这个方法中,你可以调用多个方法,例如 from,subject, view, 和 attach 来配置邮件的内容和发送。
3.配置可邮寄类 SendPrice
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; class SendPrice extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ protected $data; public function __construct($data) { // $this->data = $data; } /** * Build the message. * * @return $this */ public function build() { Log::info("start",['newSendPrice starting']); //return $this->view('view.name'); //$from_address = $this->data['from']['address']; //$from_name = $this->data['from']['name']; $subject = $this->data['subject']; $member_info = $this->data['member_info']; $item = $this->data['item']; return $this->subject($subject)->view('newest_home.email.email_quote')->with([ 'member_info'=> $member_info, 'item'=> $item ]); /*return $this->from($from_address, $from_name)->subject($subject)->view('newest_home.email.email_quote')->with([ 'member_info'=> $member_info, 'item'=> $item ]);*/ } }
4.配置邮件模板email_quote
<html> <head> <title>**网报价提醒信息</title> </head> <body> <?php $delivery = array(1=>'快递到门',2=>'物流自提',3=>'送货上门');?> <p>尊敬的{{$member_info['user_name']}}:</p> <p>感谢你的来访,您所询产品cas:<strong>{{$member_info['cas']}}</strong> 名称:<strong>{{$member_info['prod_name']}}</strong> 报价如下:</p> <table style="width: 98%;"> <tbody> @foreach($item as $k1=>$v1) @foreach($v1['list'] as $k=>$v) <tr> @if($v['customization_type'] == '定制') <td style="border: 1px solid #dddddd;">¥{{$v['price']}}/{{$v['package']}}{{$v['package_unit']}}/{{$v['purity']}}/{{$v['customization_type']}}{{$v['etd']}}天/{{$delivery[$v['ship_method']]}}/{{$member_info['invoice']}};</td> @else <td style="border: 1px solid #dddddd;">¥{{$v['price']}}/{{$v['package']}}{{$v['package_unit']}}/{{$v['purity']}}/{{$v['customization_type']}}/{{$delivery[$v['ship_method']]}}/{{$member_info['invoice']}};</td> @endif </tr> @endforeach @if($v1['note']) <tr> <td>备注:<span style="color: red;">{{$v1['note']}}</span></td> </tr> @endif @endforeach </tbody> </table> <p>如要下单,请登陆平台下单即可,或者联系对应撮合。</p> <p>**网祝您工作愉快,谢谢!</p> </body> </html>
5.队列发送邮件业务逻辑实现方法
业务逻辑发送邮件方法
$member_info = array( 'cas'=>$inquiry->cas, 'prod_name'=>$inquiry->prod_name, 'email'=>$inquiry->user->email, 'can_send_email'=>$inquiry->user->can_send_email, 'user_name'=>$inquiry->user->name, 'manage_id'=>$inquiry->user->user_id, //撮合员 'invoice'=>$inquiry->invoices->erp_name, 'openid'=>$openid, 'create_time'=>date('Y-m-d H:i:s',time()) ); $sendPriceArr = array( 'member'=>$member_info, 'item'=>$list, ); //塞入发送邮件SendPriceEmail队列里 $this->dispatch((new SendPriceEmail($sendPriceArr))->onQueue("SendPriceEmail"));
6. 新建 SendPriceEmail 队列
php artisan make:queue SendPriceEmail
7. SendPriceEmail 队列实现
<?php namespace App\Jobs; use App\Library\Common; use App\Mail\SendPrice; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; class SendPriceEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ protected $sendInfo; public function __construct($sendInfo) { // $this->sendInfo = $sendInfo; } /** * Execute the job. * * @return void */ public function handle() { Log::info("start", $this->sendInfo); $member_info = $this->sendInfo['member']; $item = $this->sendInfo['item']; if(!filter_var($member_info['email'], FILTER_VALIDATE_EMAIL)){ return; } //不能发送的邮箱 if($member_info['can_send_email'] == 1){ Log::info("unable send email", [$member_info['email']]); return; } //找对应的发送邮件发送 $subject = $member_info['cas']."/".$member_info['prod_name']."/"."已报价"; $data = array( 'member_info'=>$member_info, 'item'=> $item, 'subject'=> $subject ); //设置对应的撮合员邮件发送 Common::setUserSendEmailConfig($member_info['manage_id']); //发送邮件 Mail::to($member_info['email'])->bcc('zzs911119@163.com') ->send(new SendPrice($data)); //早前唯一邮箱发送办法 /*Mail::send('newest_home.email.email_quote',['member_info'=>$member_info,'item'=>$item],function($message) use ($member_info, $subject){ $message ->to($member_info['email'])->subject($subject); });*/ } }
8.Common里两个方法,获取 设置给定的不同人员的邮箱Config
/** * 获取撮合员邮箱设置 * @param $user_id * @return mixed */ public static function getUserSendEmailConfig($user_id){ //撮合ids $user_ids = [18,23, 24, 25, 26, 28]; if(!in_array($user_id, $user_ids)) return config('bs_email.27'); return config('bs_email.'.$user_id); } /** * 不同用户对应自己撮合员邮箱发送 * @param $user_id 撮合员id */ public static function setUserSendEmailConfig($user_id){ $userEmailConfig = self::getUserSendEmailConfig($user_id); $emailConfig = config('mail'); $emailConfig['host'] = $userEmailConfig['host']; $emailConfig['port'] = $userEmailConfig['port']; $emailConfig['username'] = $userEmailConfig['username']; $emailConfig['password'] = $userEmailConfig['password']; $emailConfig['from']['address'] = $userEmailConfig['from']['address']; $emailConfig['from']['name'] = $userEmailConfig['from']['name']; config(['mail' => $emailConfig]); }