通过 Mandrill 发送电子邮件

send email by Mandrill

我需要给山魈发邮件。这个 Mandrill API 在我的项目中实现,并通过客户端提供的 apikey 发送测试邮件。我有两种发送邮件的选择,一种是通过我的 Mandrill 帐户,另一种是用户可以通过 MailChimp 登录。然后插入 API KEY mandrill 您的帐户。

我在 conf 文件中有一个默认变量,如下所示:

public $default = array(
    'transport' => 'Smtp',
    'from' => array('noreply@example.com' => 'Example'),
    'host' => 'smtp.mandrillapp.com',
    'port' => 587,
    'timeout' => 30,
    'username' => 'example@example.com',
    'password' => '12345678',
    'client' => null,
    'log' => false
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

要通过我的帐户 mandrill 发送邮件,我这样做:

$email = new FrameworkEmail();
$email->config('default');
$email->emailFormat('html');

然后我给了我的帐户 Mandrill 数据。但是,如果用户选择使用 MailChimp 进行识别并添加您的 API KEY Mandrill 邮件,则应从您的帐户交易电子邮件中发送,而不是我的。知道这是否可能吗?

我认为这不可能通过 MailChimp 进行身份验证,然后通过 Mandrill 发送。 Mandrill API 使用与 MailChimp API 不同的一组密钥,因此如果用户通过 MailChimp 登录,您将无法访问他们的 Mandrill API 密钥。

编辑: 如果您有用户的 Mandrill API 键,您应该能够从 Mandrill SDK 直接将其输入 Mandrill 发送函数:

<?php 
$mandrill = new Mandrill('USER_PROVIDED_API_KEY_GOES_HERE');
$message = array(
    'html' => '<p>html content here</p>',
    // other details here
)
$async = False;
$ip_pool = null;
$send_at = null;

$result = $mandrill->messages->send($message, $async, $ip_pool, $send_at);
?>

有关 SDK 中消息功能的更多详细信息,请参见 here

编辑 #2:使用 CakeEmail 可以实现相同的方法 - 您只需要在收到用户的 API 密钥时实例化 $email class,而不是之前。

CakeEmail 在标准设置中建议您在初始配置中执行此操作:

class EmailConfig {
    public $mandrill = array(
        'transport' => 'Mandrill.Mandrill',
        'from' => 'from@example.com',
        'fromName' => 'FromName',
        'timeout' => 30,
        'api_key' => 'YOUR_API_KEY',
        'emailFormat' => 'both',
    );
}

但我们不能使用默认值设置它,然后使用他们的 API 密钥为每个用户更改它。我们需要在收到用户的电子邮件时实例化它,如下所示:

App::uses('CakeEmail', 'Network/Email');

// PHP code that takes in user email
$user_api_key = // this would come from a form, or from a user's record in the database

$email = new CakeEmail(array(
    'transport' => 'Mandrill.Mandrill',
    'from' => 'from@example.com',
    'fromName' => 'FromName',
    'timeout' => 30,
    'api_key' => $user_api_key,
    'emailFormat' => 'both',
));

// add CakeEmail details like $email->template, $email->subject(), etc.

$email->send();

所以不管用什么框架,原理都是一样的。与其在全局设置中实例化 Mandrill 配置详细信息(如大多数电子邮件框架推荐的那样),您需要在用户想要发送电子邮件时使用用户特定的详细信息实例化它们。