上一篇
在 .env
文件中配置邮件服务(以 SMTP 为例):
MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=587 MAIL_USERNAME=your-email@example.com MAIL_PASSWORD=your-password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=from@example.com MAIL_FROM_NAME="Your App Name"
使用 Artisan 命令创建邮件类:
php artisan make:mail WelcomeEmail
在 app/Mail/WelcomeEmail.php
中配置邮件内容:
use Illuminate\Mail\Mailable; class WelcomeEmail extends Mailable { public $user; public function __construct($user) { $this->user = $user; } public function build() { return $this->view('emails.welcome') ->subject('欢迎加入!') ->attach('/path/to/file.pdf'); // 添加附件 } }
在 resources/views/emails/welcome.blade.php
中编写模板:
<h1>你好,{{ $user->name }}!</h1> <p>感谢注册,点击链接激活账号:<a href="{{ $user->activation_link }}">激活</a></p>
在控制器中调用邮件发送:
use App\Mail\WelcomeEmail; use Illuminate\Support\Facades\Mail; Mail::to($user->email)->send(new WelcomeEmail($user));
创建文件上传表单(带 CSRF 保护):
@csrf <input type="file" name="file" required> <button type="submit">上传</button> </form>
在 routes/web.php
中定义路由:
Route::post('/upload', 'FileController@upload')->name('upload');
在 FileController.php
中处理上传:
use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; public function upload(Request $request) { $validated = $request->validate([ 'file' => 'required|file|max:10240|mimes:pdf,docx', // 限制类型和大小 ]); $path = $request->file('file')->store('uploads', 'public'); return back()->with('success', '文件上传成功!路径:' . $path); }
在 config/filesystems.php
中配置存储盘:
'disks' => [ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], ],
用户上传文件后,系统自动发送包含文件链接的邮件。
上传文件并获取路径
$path = $request->file('file')->store('uploads', 'public');
生成邮件内容
$data = [ 'file_url' => Storage::url($path), 'user' => Auth::user() ];
发送邮件
Mail::to($user->email)->send(new FileUploadedEmail($data));
邮件模板示例
<p>您上传的文件已保存,点击链接查看:<a href="{{ $file_url }}">下载文件</a></p>
composer require league/flysystem-aws-s3-v3
.env
:FILESYSTEM_DRIVER=s3 AWS_ACCESS_KEY_ID=your-key AWS_SECRET_ACCESS_KEY=your-secret AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=your-bucket
修改 .env
:
QUEUE_CONNECTION=database
生成队列表:
php artisan queue:table php artisan migrate
在邮件类中实现 ShouldQueue
:
use Illuminate\Contracts\Queue\ShouldQueue; class WelcomeEmail extends Mailable implements ShouldQueue { // ... }
try-catch
捕获邮件和文件操作异常。通过以上步骤,您可以在 Laravel 中高效实现邮件发送与文件上传功能,并结合实际场景进行扩展优化。💡
本文由 业务大全 于2025-08-26发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://xdh.7tqx.com/wenda/732536.html
发表评论