Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Curl将字符串文件添加为post字段_Php_Curl_Mailgun - Fatal编程技术网

Php Curl将字符串文件添加为post字段

Php Curl将字符串文件添加为post字段,php,curl,mailgun,Php,Curl,Mailgun,我在使用MailgunWebAPI时遇到了添加内联文件的问题。 我们的软件创建一个图像并将其作为字符串传递。我想把那个图像内联起来 我遇到的问题是,php curl接受的是一个文件指针,而不是一个实际的文件。如果可能的话,我想避免编写tmp文件,因为我们有很多进程在服务器上工作,并且不想发送坏的电子邮件 提前谢谢 邮枪内联样本: 我正在使用的代码示例: function send_inline_image($image) { $ch = curl_init(); curl_setopt

我在使用MailgunWebAPI时遇到了添加内联文件的问题。 我们的软件创建一个图像并将其作为字符串传递。我想把那个图像内联起来 我遇到的问题是,php curl接受的是一个文件指针,而不是一个实际的文件。如果可能的话,我想避免编写tmp文件,因为我们有很多进程在服务器上工作,并且不想发送坏的电子邮件

提前谢谢

邮枪内联样本: 我正在使用的代码示例:

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 <me@samples.mailgun.org>',
                    'to' => 'sergeyo@profista.com',
                    '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)
函数发送内嵌图像($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');
旋度设置选项($ch,
CURLOPT_POSTFIELDS,
数组('from'=>'兴奋用户',
'到'=>'sergeyo@profista.com',
“主题”=>“你好”,
“text'=>“正在测试一些邮枪的威力!”,
“html”=>“内联图像:”,
“内联”=>$image)
$result=curl\u exec($ch);
卷曲关闭($ch);
返回$result;
}
$image='我们生成的一些图像字符串'
发送内嵌图像($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 <me@samples.mailgun.org>',
                'to' => 'sergeyo@profista.com',
                '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)
函数发送内嵌图像($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');
旋度设置选项($ch,
CURLOPT_POSTFIELDS,
数组('from'=>'兴奋用户',
'到'=>'sergeyo@profista.com',
“主题”=>“你好”,
“text'=>“正在测试一些邮枪的威力!”,
“html”=>“内联图像:”,
'inline'=>array($image)//使用array而不是$image
))
$result=curl\u exec($ch);
卷曲关闭($ch);
返回$result;
}
$image='我们生成的一些图像字符串'
发送内嵌图像($image)

查看注释“使用数组而不是$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 <me@samples.mailgun.org>',
                'to' => 'sergeyo@profista.com',
                '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)
函数发送内嵌图像($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');
旋度设置选项($ch,
CURLOPT_POSTFIELDS,
数组('from'=>'兴奋用户',
'到'=>'sergeyo@profista.com',
“主题”=>“你好”,
“text'=>“正在测试一些邮枪的威力!”,
“html”=>“内联图像:”,
'inline'=>array($image)//使用array而不是$image
))
$result=curl\u exec($ch);
卷曲关闭($ch);
返回$result;
}
$image='我们生成的一些图像字符串'
发送内嵌图像($image)

查看评论“使用数组而不是$image”

我对php/mailgun和电子邮件构造一无所知。您是否能够使用上述“不”工作的代码生成和发送电子邮件,或者您只是在寻找一种用字符串而不是文件调用php curl代码的方法?如果是前者,请对照第3节中的示例检查电子邮件的源文件。不管怎样,您的图像字符串是什么格式的?例如,它是base64编码的,还是您希望mailgun对其进行编码?更多的解释是,我正在从当前的SMPT服务器切换到mailgun。我们使用旧版本的phpmailer发送进行base64编码的文件。所以我有原始版本和base64版本。它也是一个PNG文件,上面的代码示例就是我试图执行的。您收到了什么错误?根据几个stackoverflow问题,php curl可以处理数据的多个输入表单,例如。您可以跳过数组技术,像手册中那样构建完整的URL编码字符串,如
param1=val1¶m2=val2&…
。如果这不起作用,也许mailgun的api只喜欢以一种特殊的方式发布的inline=图像。您可以将一个工作示例发送到Web服务器,该服务器只会将输入返回给您,以便您可以学习模仿该格式。主要问题是通过字符串发送文件。如果是一个文件,我可以手动设置参数并以这种方式发送。如果我有一个文件位置,我可以使用@notation,就像您示例中的那样。但这两个都不适合我。也没有错误,因为当它需要发送mime类型、名称等文件时,它会将字符串作为参数发送。很抱歉,我在这里没有用。如果您不希望php curl的automagic mime类型等进行包装,并且希望发送字符串,那么您可能需要自己完成请求的完整主体。类似于但您不必在该页面上的
$pld00200request
/
$pldfile
中读取文件。您必须“自己”管理内容长度等(可能有一个用于此的库)。另外,也许您可以尝试使用curl(无php)和它的--trace ascii标志来“查看”发生了什么。我对php/mailgun和电子邮件构造一无所知。你能用上面的代码制作和发送电子邮件,而这些代码“不”起作用吗