【问题标题】:Laravel 5.8 send email with file attachmentLaravel 5.8 发送带有文件附件的电子邮件
【发布时间】:2020-04-25 10:23:24
【问题描述】:

我正在尝试使用 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('mikejosephm52@gmail.com')->subject('Test123');
                $message->from('info@brightrock.co.ke');
              });*/

              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']);
          }
        }

对于上面的 build 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'),
    ],

],

非常感谢您的帮助

【问题讨论】:

  • 尝试将路径设置为asset('files/1587758910.jpg')
  • 嗨@kidA。试过了,仍然没有发送

标签: laravel email email-attachments


【解决方案1】:

用户 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');

【讨论】:

  • OP 说图片在 public/files 文件夹中,而不是在存储中。
  • 使用attachFromStorageDisk('files/'.$this-&gt;data['name'], 'public') 或用户attach(public_path('/files/'.$this-&gt;data['name']))。希望它对你有用。
  • 嗨@HarunRRayhan。我已经尝试使用 attach(public_path('/files/'.$this->data['name'])) 它仍然没有发送,attachFromStorageDisk('files /'.$this->data['name'], 'public') 它带来的错误:InvalidArgumentException Driver [] is not supported
猜你喜欢
  • 2022-01-06
  • 2012-06-15
  • 2015-09-09
  • 2017-09-06
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多