4

我正在使用谷歌应用引擎发送基于https://github.com/godsid/appEngineSendMail的电子邮件

所以我从远程主机发出 curl post 请求,它可以工作。

但是如何将文件附加到 appengine?

这是我的卷曲 post_fields

$fields = array(
                'to' => urlencode($to),
                'sender' => urlencode($from),
                'body' => urlencode($body),
                'subject' => urlencode($subject),
                'key' => urlencode('****')
                );

$fields['attachments']= array("@". $_FILES['attachment']['tmp_name']);

我已经搜索了 2 天的答案......感谢任何帮助或提示

4

2 回答 2

3

问题是我正在对字段数组进行 url_encoding,这样做会阻止 cURL 实际上注意到 @filename 并将文件附加到请求中。

所以我不得不多部分提出请求

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));

并将字段附加到请求而不对其进行编码

curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

我在 python 方面的错误是使用 self.request.get(),这是 github 上的脚本使用的,我基于的那个

所以我不得不像这样使用self.request.post []

attachment = self.request.POST["attachment"] #actual attachment file
attachment_name = self.request.POST["attachment_name"] #string value of attahcment name sent from php side
message.attachments = [(attachment_name, attachment.value)]

*注意 self.request.get 是一个函数,而 self.request.post 是一个数组

希望有一天这可以帮助某人:)

于 2013-11-25T10:40:17.530 回答
2

您可以轻松放入多个附件。对于每个附件,您需要输入文件名和文件数据。

$fields['attachments'] = array(
    $_FILES['attachment']['name'] => file_get_contents($_FILES['attachment']['tmp_name'])
);
于 2013-11-19T10:29:11.763 回答