php mail laravel,php-Laravel邮件:传递字符串而不是vi

郗浩言
2023-12-01

php-Laravel邮件:传递字符串而不是vi

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

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

例:

$content = "Hi,welcome user!";

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

8个解决方案

89 votes

更新:在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('

Hi, welcome user!

', 'text/html'); // for HTML rich messages

});

Jarek Tkaczyk answered 2020-08-12T02:54:09Z

38 votes

对于HTML电子邮件

Mail::send(array(), array(), function ($message) use ($html) {

$message->to(..)

->subject(..)

->from(..)

->setBody($html, 'text/html');

});

Sajjad Ashraf answered 2020-08-12T02:54:29Z

13 votes

Mailer类将字符串传递给$content,该字符串通过其他各种方法调用views->make()。因此,直接传递内容字符串将不起作用,因为它将尝试使用该名称加载视图。

您需要做的是创建一个仅回显$content的视图

// mail-template.php

然后在运行时将字符串插入该视图。

$content = "Hi,welcome user!";

$data = [

'content' => $content

];

Mail::send('mail-template', $data, function() { });

Ben Swinburne answered 2020-08-12T02:54:58Z

2 votes

如果您使用邮件。 您可以在build方法中执行以下操作:

public function build()

{

return $this->view('email')

->with(['html'=>'This is the message']);

}

您只需继续在资源文件夹中创建刀片视图email.blade.php。

然后在刀片中,您可以使用laravel刀片语法引用您的字符串

{{$html}}

要么

{!!$html!!}

如果您的原始文本包含html标记我希望这对那些将模板存储在数据库中并且想利用Laravel中的Mailables类的用户有用。

Matthew Odedoyin answered 2020-08-12T02:55:37Z

2 votes

它与问题没有直接关系,但是对于在保留自定义HTML版本的同时搜索设置电子邮件纯文本版本的问题,您可以使用以下示例:

Mail::raw([], function($message) {

$message->from('contact@company.com', 'Company name');

$message->to('johndoe@gmail.com');

$message->subject('5% off all our website');

$message->setBody( '

5% off its awesome

Go get it now !

', 'text/html' );

$message->addPart("5% off its awesome\n\nGo get it now!", 'text/plain');

});

如果您问“但是为什么不将第一个参数设置为纯文本?”,我进行了测试,它只包含html部分,而忽略了原始部分。

如果您需要使用其他变量,匿名函数将需要您使用use()语句,如下所示:

Mail::raw([], function($message) use($html, $plain, $to, $subject, $formEmail, $formName){

$message->from($fromEmail, $fromName);

$message->to($to);

$message->subject($subject);

$message->setBody($html, 'text/html' ); // dont miss the '' or your spam score will increase !

$message->addPart($plain, 'text/plain');

});

希望对您有帮助。

Anwar answered 2020-08-12T02:56:10Z

1 votes

public function build()

{

$message = 'Hi,welcome user!'

return $this->html($message)->subject($message);

}

jeidison farias answered 2020-08-12T02:56:26Z

0 votes

要使用Laravel Mailables发送原始html,文本等,您可以

在您的Mailable中重写Mailable-> send(),然后在以前的响应中使用该方法:

send([], [], function($message){ $message->setBody() } )

完全不需要在构建函数中调用$ this-> view()。

patrox answered 2020-08-12T02:57:03Z

0 votes

如你所知

仅可邮寄邮件可以排队。

意思是,如果您使用html接口

1)首先,你应该总是做

php artisan queue:restart

2)其次,在您的可邮寄邮件中,可以使用30075397571708200920096方法(在laravel 5.8中测试)

public function build(): self

{

return $this

->html('

ForwardEmail

')

->subject(config('app.name') . ' ' . 'email forwarded')

->attachData($this->content, 'email.eml', [

'mime' => 'application/eml',

]);

}

Yevgeniy Afanasyev answered 2020-08-12T02:57:41Z

 类似资料: