簡體   English   中英

如何在 Laravel 的隊列郵件中添加 PDF 附件?

[英]How to add PDF attachment in queue mails In Laravel?

我能夠發送 email 但是當我將 attachData() 放入UserMail時出現錯誤。 我認為因為應該在UserEmailJob中聲明的參數 $this->pdf ,我不知道如何解決它。

用戶電子郵件工作

public $details;
/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct($details)
{
    $this->details = $details;
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    $email = new UserEmail();
    Mail::to($this->details['email'])->send($email);
}

UserEmail - 郵件 class
這行 $this->pdf->output() 有錯誤

public function __construct()
{

}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->from('info@gmail.com', 'Mailtrap')
        ->subject('Stock Report - Laravel Tutorial')
        ->view('emails.userEmail')
        ->attachData($this->pdf->output(), 'stock_report.pdf');
}

用戶控制器

public function mailClass()
{
    $users = User::all();
    $data['name'] = 'Hi';

    $pdf = app('dompdf.wrapper');
    $pdf->loadView('cert', $data);
    $pdf->setPaper('A4', 'landscape');

    $details = ['email' => 'abc@gamil.com'];
    UserEmailJob::dispatch($details);
    return response()->json(['status' => 'success', 'message' => 'Report has been sent successfully.']);
}

因為 $this->pdf 沒有在 class 中定義。

嘗試這個:

private $pdf;

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

public function build(){

      return $this->from('info@gmail.com', 'Mailtrap')
        ->subject('Stock Report - Laravel Tutorial')
        ->view('emails.userEmail')
        ->attach($this->pdf);
    }

在你的用戶控制器中

UserEmailJob::dispatch($details, $pdf->output());

所以修改一下

public $details;
    public $pdfStream;
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($details, $pdfStream)
        {
            $this->details = $details;
            $this->pdfStream = $pdfStream;
        }
    
    public function handle()
    {
        $email = new UserEmail($this->pdfStream);
        Mail::to($this->details['email'])->send($email);
    }

編輯:可能不建議通過 json stream pdf

用戶電子郵件工作

public $details;
public $data;
/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct($details, $data)
{
    $this->details = $details;
    $this->data = $data;
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    $email = new UserEmail($this->data);
    Mail::to($this->details['email'])->send($email);
    
    
    }

用戶郵箱

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

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    $pdf = app('dompdf.wrapper');
    $pdf->loadView('cert', $this->data);
    $pdf->setPaper('A4', 'landscape');
    
    return $this->from('info@gmail.com', 'Mailtrap')
        ->subject('Stock Report - Laravel Tutorial')
        ->view('emails.userEmail')
        ->attachData($pdf->output(), 'stock_report.pdf');
}

用戶控制器

public function mailClass()
{
    $users = User::all();
    $data['name'] = 'Hi';
    $details = ['email' => 'abc@gamil.com'];
    UserEmailJob::dispatch($details, $data);
    return response()->json(['status' => 'success', 'message' => 'Report has been sent successfully.']);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM