我正在创建一个动态发送器,我将此代码放在Service类**(AppServiceProvider.php)**或返回准备使用的Mailer对象的函数中。
public function register()
{
$this->app->bind('user.id', function ($app, $parameters) {
$smtp_host = array_get($parameters, 'smtp_host');
$smtp_port = array_get($parameters, 'smtp_port');
$smtp_username = array_get($parameters, 'smtp_username');
$smtp_password = array_get($parameters, 'smtp_password');
$smtp_encryption = array_get($parameters, 'smtp_encryption');
$from_email = array_get($parameters, 'from_email');
$from_name = array_get($parameters, 'from_name');
$from_email = $parameters['from_email'];
$from_name = $parameters['from_name'];
$transport = new Swift_SmtpTransport($smtp_host, $smtp_port);
$transport->setUsername($smtp_username);
$transport->setPassword($smtp_password);
$transport->setEncryption($smtp_encryption);
$swift_mailer = new Swift_Mailer($transport);
//$mailer = new Mail;
$mailer = new Mailer($app->get('view'), $swift_mailer, $app->get('events'));
$mailer->alwaysFrom($from_email, $from_name);
$mailer->alwaysReplyTo($from_email, $from_name);
return $mailer;
});
}
这是我的控制器,我将参数传递给新实例'mailer'。
public function email(DocumentEmailRequest $request)
{
$user = Company::active();
$company = Company::active();
$document = Document::find($request->input('id'));
$customer_email = $request->input('customer_email');
$configuration = [
'smtp_host' => 'smtp.gmail.com',
'smtp_port' => '465',
'smtp_username' => 'email@gmail.com',
'smtp_password' => 'password',
'smtp_encryption' => 'ssl',
'from_email' => 'email@gmail.com',
'from_name' => 'name',
];
$mailer = app()->makeWith('user.id', $configuration);
$mailer->to($customer_email)->send(new DocumentEmail($company, $document));
return [
'success' => true
];
}
我得到这个错误:
"Swift_RfcComplianceException" exception. line: 355 message: "The given mailbox address [] does not comply with RFC 2822, 3.6.2.
发送电子邮件并不复杂。Laravel提供了一个干净、简单的电子邮件API,由流行的SwiftMailer库提供支持。Laravel和SwiftMailer提供了通过SMTP、Mailgun、邮戳、Amazon SES和sendmail发送电子邮件的驱动程序,允许您快速开始通过您选择的本地或基于云的服务发送邮件。
Laravel的电子邮件服务可以通过应用程序的config/mail.php
配置文件配置。因此,我建议您将此代码移动到配置中的正确部分。。在此文件中配置的每个邮件发送器可能有自己独特的配置,甚至有自己独特的"传输",允许您的应用程序使用不同的电子邮件服务来发送特定的电子邮件消息。例如,您的应用程序可能使用邮戳发送事务性电子邮件,同时使用Amazon SES发送批量电子邮件。
在您的mail
配置文件中,您将发现一个mailers
配置数组。这个数组包含Laravel支持的每个主要邮件驱动程序/传输的样例配置项,而默认配置值决定当应用程序需要发送电子邮件消息时,default
将使用哪个邮件器。
我强烈建议您遵循官方的Laravel文档。这样你就可以省去很多这样的问题,你的代码也会比现在干净得多。
关于Laravel返回的错误,可能是$customer_email
变量为空或不是有效的电子邮件。