设置山魈模板 Laravel

Posted

技术标签:

【中文标题】设置山魈模板 Laravel【英文标题】:Set Mandrill Template Laravel 【发布时间】:2014-10-14 09:24:29 【问题描述】:

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

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

这会从“电子邮件”内的“测试”视图中发送一封电子邮件,就像它应该的那样。在使用 Mandrill 库的普通 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);

【问题讨论】:

【参考方案1】:

作为替代方案,您可以使用 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!');
);

请注意,我没有对此进行测试 - 只是按照我在此处阅读的内容:Using SMTP Headers to customize your messages。

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

【讨论】:

@Mattias 已确认。您需要创建“emails.test”视图,但触发的电子邮件是通过标题指定的模板。 但是 - smtp 标头限制为 1000 个字符,因此您无法以这种方式将无限数据传递给模板。见mandrill.zendesk.com/hc/en-us/articles/… 谢谢。两件事:1. X-MC-Temmplate 里面有两个 ms。 2.可以添加1000多个字符,只需要添加多个表头即可。 这应该被标记为正确答案,因为它更实用并且不需要gambs。 +1【参考方案2】:

使用Illuminate\Mail\Mailer 似乎无法做到这一点。看起来Mandrill transport 专门使用了send-raw Mandrill 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);

这绝对不是理想的,但可行的解决方案。我会投票让您只使用 Mailer 系统之外的 Mandrill 库。

【讨论】:

似乎确实如此。经过进一步思考,似乎没有令人信服的理由不在 Laravel 中推出我自己的模板——我更喜欢 Mandrill 处理一些小事情,但没什么大不了的。 使用 Mandrill 上托管的模板有很多原因。主要是速度和带宽。如果您要发送一百万封模板电子邮件,那么您必须在 PHP 中呈现一百万封电子邮件,而您必须通过网络将一百万封电子邮件作为正文发送给 mandrill。 只是添加到@datashaman 的评论中,这取决于您在做什么,非开发人员能够通过 mandrill 添加和编辑模板与需要开发时间/经验相比,还有一个巨大的优势/a 开发环境来编辑代码本身

以上是关于设置山魈模板 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

发送模板山魈 javascript

mailchimp 模板导出到带有合并标签的山魈问题

如何将动态内容传递给Rails中的山魈模板

如何通过API向山魈模板中的所有链接添加参数?

Rails 邮件程序山魈设置

山魈如何工作?