设置Mandrill模板Laravel

Tom*_*las 5 php laravel laravel-4 mandrill

我正在尝试在默认的Laravel 4 Mailer中发送Mandrill电子邮件,我想设置模板并将数据发送到Mandrill.我宁愿不在我的Laravel中使用本地文件,我将这一切设置为在Mandrill内部工作.这就是我在Laravel中设置的方式:

    Mail::send('emails.test',[],function($message)
    {
        $message->to(Input::get('email'), 'John Smith')->subject('Welcome!');
    });
    return 
Run Code Online (Sandbox Code Playgroud)

这会从"电子邮件"中的"测试"视图发送一封电子邮件,就像它应该的那样.在使用Mandrill库的vanilla PHP中,这可以发送到我想要的模板.

$message = array(
'subject' => 'Subject redacted',
'from_email' => $main_email,
'to' => array(array('email' => $to_email)),
'merge_vars' => array(array(
    'rcpt' => $to_email,
    'vars' =>
    array(
        array(
            'name' => 'DETAIL',
            'content' => $detail),
            array(
            'name' => 'ERROR_AMOUNT',
            'content' => '$'.$trans_amount)
            ,
            array(
            'name' => 'CO_NAME',
            'content' => $business_name),

            array(
            'name' => 'SMS',
            'content' => $sms)
))));

$template_name = 'Test Email';

$template_content = array(
array(
    'name' => 'main',
    )
);

$response = $mandrill->messages->sendTemplate($template_name, $template_content, $message);
Run Code Online (Sandbox Code Playgroud)

Sim*_*pel 8

或者,您可以使用Laravel的Mandrill函数设置X-MC-MergeVars和X-MC-Template标头.

Mail::send('emails.test', [], function($message) use ($mergevars)
{
    $headers = $message->getHeaders();
    $headers->addTextHeader('X-MC-MergeVars', json_encode($mergevars));
    $headers->addTextHeader('X-MC-Template', 'my-template');

    $message->to(Input::get('email'), 'John Smith')->subject('Welcome!');
});
Run Code Online (Sandbox Code Playgroud)

请注意,我没有测试过这个 - 只是按照我在这里阅读的内容:使用SMTP标头来自定义您的消息.

您可能需要使用除addTextHeader之外的其他内容 - 请查看Swiftmailer文档以确定如何为您正在设置的数据添加正确的标头类型.


cla*_*rkf 3

使用 似乎不可能做到这一点Illuminate\Mail\Mailer。看起来Mandrill 传输专门使用send-rawMandrill API 端点。

这给您提供了两个选择:实现您自己的传输并在系统内工作Mailer,或在系统外工作Mailer。如果您打算选择后者,您可能最好只使用官方库。

如果您想实现自己的传输,请查看接口Swift_Transport。这不会是一个完美的匹配,因为你正在尝试做一些Mailer从未打算做的事情,但通过足够的黑客攻击,你可以启动并运行一些东西。您可能需要在Message类中使用未定义的成员,例如:

$message->template = "template_name";
$message->content = array(/* content here */);
$message->message = array(/* message here */);

// MandrilTemplateTransport.php
public function send(Swift_Mime_Message $message, &$failedRecipients = null)
{
    $this->messages->send($message->template, $message->content, $message->message);
}
Run Code Online (Sandbox Code Playgroud)

这绝对不是理想的解决方案,但却是一个可行的解决方案。我投票赞成你只使用Mailer系统之外的 Mandrill 库。