我正在尝试使用 mailgun api仅使用图像文件的内容向已发送的电子邮件添加内嵌图像。
据我所知,mailgun-php只允许在内联元素中指定路径。
有没有办法在不修改 mailgun-php 库的情况下使用内容添加图片?
我已经尝试在html img标签中内嵌整个内容,但这并不适用于所有电子邮件客户端(例如gmail):
<img src="data:image/png;base64,BASE64CONTENTSHERE==" />
答案 0 :(得分:0)
我没有找到办法在不修改mailgun-php代码的情况下这样做,所以我使用以下内容将文件存储在临时文件夹中。
$prefix = 'someprefix'; // Used to easily identify the file if needed
$filename = uniqid($prefix, true).'.png';
$path = sys_get_temp_dir().DIRECTORY_SEPARATOR.$filename;
$f = fopen($path, 'w');
fwrite($f, $binaryImageContent);
fclose($f);
然后发送电子邮件并删除临时文件
$mailgun = new \MailgunClient();
$response = $mailgun->sendEmail(
$fromEmail,
$replyTo,
array($toEmail),
$subject,
$html,
array(
'inline' => $path
)
);
unlink($path);
下面是MailgunClient类的样子,我必须显式设置Guzzle http客户端,因为默认情况下失败了。注意MAILGUN_API_KEY
和MAILGUN_DOMAIN
必须使用define('MAILGUN_API_KEY', 'key_here');
和define('MAILGUN_DOMAIN', 'domain.com');
<?php
use Mailgun\Mailgun;
class MailgunClient {
public function sendEmail($from, $replyTo, $to, $subject, $html, $inline = null) {
$client = new \Http\Adapter\Guzzle6\Client();
$mailgun = new \Mailgun\Mailgun(MAILGUN_API_KEY, $client);
$domain = MAILGUN_DOMAIN;
$params = array();
$params['from'] = $from;
$params['h:Reply-To'] = $replyTo;
$params['subject'] = $subject;
$params['text'] = $html;
$params['html'] = $html;
$params['inline'] = $inline;
$params['to'] = $to;
$mailgun->sendMessage($domain, $params, $inline);
}
}
最后在电子邮件中使用以下标记来引用内联图像。 src
属性必须为cid:the_filename_created
才能匹配电子邮件中的库输出。
<img src="cid:'.$filename.'.png" alt="logo" style="width:auto;height:150px;max-height:150px;"/>