Laravel 邮件:传递字符串而不是视图

新手上路,请多包涵

我想使用 laravel 发送一封确认电子邮件。 laravel Mail::send() 函数似乎只接受系统上文件的路径。问题是我的邮件模板存储在数据库中,而不是系统上的文件中。

如何将纯内容传递到电子邮件?

例子:

 $content = "Hi,welcome user!";

Mail::send($content,$data,function(){});

原文由 nexana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 622
2 个回答

2022 年 7 月 20 日更新:对于最新版本的 Laravel,下面的 Mail::send() 示例中的 setBody() 方法已被替换为 text() html() 方法。

_更新_:在 Laravel 5 中,您可以使用 raw 代替:

 Mail::raw('Hi, welcome user!', function ($message) {
  $message->to(..)
    ->subject(..);
});


这就是你的做法:

 Mail::send([], [], function ($message) {
  $message->to(..)
    ->subject(..)
    // here comes what you want
    ->setBody('Hi, welcome user!'); // assuming text/plain
    // or:
    ->setBody('<h1>Hi, welcome user!</h1>', 'text/html'); // for HTML rich messages
});

原文由 Jarek Tkaczyk 发布,翻译遵循 CC BY-SA 4.0 许可协议

laravel 9 内置了发送不带视图的 HTML 的功能。这是示例:

 \Illuminate\Support\Facades\Mail::html($content, function ($message) {
    $message->to("email@example.com")
        ->subject("Test dev 4")
        ->from("email@example.com");
});

如果我们使用接受的答案,也会返回:

Symfony\Component\Mime\Message::setBody(): 参数 #1 ($body) 必须是 ?Symfony\Component\Mime\Part\AbstractPart 类型,给定字符串,在 /Users/yaskur/Sites/laravel/mail 中调用-builder/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php 第 23 行

发生这种情况是因为 laravel 使用新库发送电子邮件。以前使用 Swiftmailer,现在使用 Symfony Mailer。要发送不带视图的 HTML 电子邮件,您还可以使用以下代码:

 Mail::raw("", function ($message) use ($content) {
    $body = new \Symfony\Component\Mime\Part\TextPart($content);
    $message->to("dyas@example.com")
        ->subject("Test dev")
        ->from("no-reply@example.com")
        ->setBody($body);
});

原文由 Muhammad Dyas Yaskur 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题