Laravel 5.8发送带有文件附件的电子邮件

问题描述 投票:0回答:1

我正在尝试使用markdown在laravel 5.8中发送带有附件的电子邮件。它本身可以正常工作,没有附件。如何发送带有附件的邮件?

表单视图:

      <form action="{{url('deputyheadteacher-email')}}" method="post" enctype="multipart/form-   data">
                {{csrf_field()}}
                <div class="box-body">
                    <div class="form-group">
                      <input type="text" class="form-control" name="subject" placeholder="Subject" required/>
                    </div>
                    <div class="form-group">
                      <textarea class="textarea" name="message" placeholder="Message" required
                      style="width: 100%; height: 125px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;"></textarea>
                    </div>
                    <div class="form-group">
                      <input type="file" id="att" name="att"/>
                    </div>
                </div>
                <div class="box-footer clearfix">
                  <button class="pull-right btn btn-default" id="sendEmail">Send <i class="fa fa-arrow-circle-right"></i></button>
                </div>
            </form>

控制器:

     namespace App\Http\Controllers;
     use Illuminate\Http\Request;
     use Session;
     use App\User;
     use Auth;
     use Input;
     use App\Mail\DeputyHeadTeacherMailAll;
     use Illuminate\Support\Facades\Mail;  
     class DeputyHeadTeacherEmailController extends Controller
     {
       public function mail(Request $request) 
       {
         $users = User::all();
         $user = Auth::user();
         $fname = $user->fname;
         $sname = $user->sname;
         $role = $user->role->name;

         $file = $request->file('att');
         $file1 = $request->att; 
         f($request->hasFile('att')) 
         {
           $image = $request->file('att');
           $name = time().'.'.$image->getClientOriginalExtension();
           $destinationPath = public_path('/files/');
           $image->move($destinationPath, $name);
         }
         else
         {
           $name = "";
         }
         //exit();
         //echo $file1." - ".$file; exit();   
         $mime = 'image/png';
         $display = 'campaign';
                $data = array(
                        'subject' => $request->subject,
                        'bodyMessage' => $request->message,
                        'attachment' => $file,
                        'attachment1' => $file1,
                        'name' => $name, 
                        'mime' => $mime,
                        'display' => $display,
                        'fname' => $fname,
                        'sname' => $sname,
                        'role' => $role,
                        );

            foreach($users as $user)
            { 
                $email = $user->email;
                Mail::to($email)->send(new DeputyHeadTeacherMailAll($data));
            } 
            /*
              Mail::send('emails/deputyheadteachersendalll',$data,function($message)
              {
                $message->to('[email protected]')->subject('Test123');
                $message->from('[email protected]');
              });*/

              Session::flash('success','Your email was sent!!!');
              return back();
        }
      }

可邮寄:

     namespace App\Mail;

     use Illuminate\Bus\Queueable;
     use Illuminate\Mail\Mailable;
     use Illuminate\Queue\SerializesModels;
     use Illuminate\Contracts\Queue\ShouldQueue;
     use App\User;
     class DeputyHeadTeacherMailAll extends Mailable
     {
         use Queueable, SerializesModels;
         public $data;
         /**
         * Create a new message instance.
         *
         * @return void
         */
         public function __construct($data)
         {
          //
          $this->data = $data;
         }
         /**
         * Build the message.
         *
         * @return $this
         */
         public function build()
         {
          //return             $this->view('emails.deputyheadteachersendalll')->attach('files/'.$this->data['name']);
    //return $this->markdown('emails.deputyheadteachersendall')->subject($this->data['subject']);
    return $this->markdown('emails.deputyheadteachersendall')->attach('files/1587758910.jpg')->subject($this->data['subject']);
          }
        }

对于以上版本的fx,第二条注释行虽然可以发送但不带附件。最后一行是尝试从public / files文件夹发送带有图片的邮件。

最后但并非最不重要的,配置/文件系统:

  'disks' => 
  [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
    ],

],

非常感谢您的帮助

laravel email email-attachments
1个回答
0
投票

[用户atttachFromStorage方法代替:

public function build()
{

    return $this->view('emails.deputyheadteachersendalll')-> attachFromStorage('files/'.$this->data['name']);

}

此处阅读更多:https://laravel.com/docs/5.8/mail#attachments

如果要使用默认磁盘以外的磁盘,请改用attachFromStorageDisk。例如:

 return $this->view('emails.deputyheadteachersendalll')-> attachFromStorageDisk('files/'.$this->data['name'], 's3');
© www.soinside.com 2019 - 2024. All rights reserved.