2013-04-26 108 views
0

我正在使用mailGun web API并遇到了添加内联文件的问题。 我们的软件创建一个图像并将其作为字符串传递。我想内联那个图像 我的问题是php curl需要一个文件指针,而不是一个实际的文件。我想避免,如果可能的,因为我们有很多的过程,在服务器上运行,并不会想发送一个坏的电子邮件Php Curl添加字符串文件作为后期字段

在此先感谢

MailGun在线样品写tmp文件:http://documentation.mailgun.net/user_manual.html#inline-image 代码示例,我我使用:

function send_inline_image($image) { 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch, CURLOPT_USERPWD, 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
    curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2/samples.mailgun.org/messages'); 
    curl_setopt($ch, 
       CURLOPT_POSTFIELDS, 
       array('from' => 'Excited User <[email protected]>', 
        'to' => '[email protected]', 
        'subject' => 'Hello', 
        'text' => 'Testing some Mailgun awesomness!', 
        'html' => '<html>Inline image: <img src="cid:test.jpg"></html>', 
        'inline' => $image)) 

    $result = curl_exec($ch); 
    curl_close($ch); 

    return $result; 
} 
$image = 'Some image string that we have generated' 
send_inline_image($image) 
+0

我什么都不知道关于PHP/mailgun和一些关于电子邮件建设。你是否能够用上面的代码生成并发送电子邮件,“不”工作,或者你是否只是想用一个字符串而不是文件调用php curl代码?如果是前者,请查看[rfc2183](http://www.ietf.org/rfc/rfc2183.txt)第3节中的示例中的电子邮件源文件。无论哪种方式,图像字符串的格式是什么?例如,它是base64编码的,还是你希望mailgun对它进行编码? – n0741337 2013-04-26 22:33:34

+0

更多的解释是我从我们当前的SMPT服务器切换到mailGun。我们使用旧版本的phpmailer发送base64编码的文件。所以我有原始版本和base64版本。另外它的一个PNG文件和上面的代码示例是我正在尝试执行的。 – Jdahern 2013-04-27 01:22:28

+0

你收到了什么错误?根据几个stackoverflow的问题,PHP curl可以处理多个数据输入格式,例如。 [CURL PHP发送图像](http://stackoverflow.com/questions/3433542/curl-php-send-image)。您可以跳过数组技术并像手册中那样构建完整的urlencoded字符串,如'param1 = val1&param2 = val2&...'。如果这不起作用,也许mailgun的api只喜欢inline =图片发布给他们一个特殊的方式。你可以发送一个有效的例子给一个web服务器,它只是回应你的输入,所以你可以学习模仿这种格式。 – n0741337 2013-04-27 22:06:11

回答

4

你只需要改变阵列的内联参数。我已经完成了它的工作。内联参数应该是一个数组而不是字符串图像路径。你可以这样说:

function send_inline_image($image) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch, CURLOPT_USERPWD, 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2/samples.mailgun.org/messages'); 
curl_setopt($ch, 
      CURLOPT_POSTFIELDS, 
      array('from' => 'Excited User <[email protected]>', 
       'to' => '[email protected]', 
       'subject' => 'Hello', 
       'text' => 'Testing some Mailgun awesomness!', 
       'html' => '<html>Inline image: <img src="cid:test.jpg"></html>', 
       'inline' => array($image)//Use array instead of $image 
)) 

    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
} 
$image = 'Some image string that we have generated' 
send_inline_image($image) 

看评论“而不是使用$图像阵列”

+1

非常感谢,我会试一试 – Jdahern 2014-07-21 21:53:18

+0

在使用数组的行上抛出“注意:数组到字符串转换...” - >'inline'=> array($ image) 任何人都会面临这种情况? – 2014-12-24 12:49:09