我正在使用httplib2和Mailgun API发送我使用Google Drive下载的电子邮件附件,该电子邮件正在发送,但没有附件。。下面是我的代码。。
DRIVE = discovery.build('drive', 'v3', http=http_auth)
request = DRIVE.files().export_media(fileId=file_id, mimeType='application/pdf')
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
logging.info("Download %d%%." % int(status.progress() * 100))
messages = {
"from": sender,
"to": recipient,
"subject": 'Attachment Mail from Mailgun',
"text": 'Testing',
"attachment": fh.getvalue()
}
url = URL
data = {
"from": messages['from'],
"to": messages['to'],
"subject": messages['subject'],
"text": messages['text'],
"attachment": messages['attachment']
}
pl = urllib.urlencode(data)
http = httplib2.Http()
http.add_credentials('api', API)
resp, content = http.request(
url, 'POST', pl,
headers={"Content-Type": "application/x-www-form-urlencoded"})
不过现在已经晚了。。。我很久以前就解决了这个问题。。下面是我所做的:
import io
import base64
from google.appengine.api import urlfetch
from libs.poster.encode import multipart_encode, MultipartParam
from oauth2client.appengine import AppAssertionCredentials
from googleapiclient.http import MediaIoBaseDownload
from apiclient.discovery import build
from httplib2 import Http
request = drive.files().export_media(fileId=spreadsheet_id, mimeType='application/pdf')
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
message = {
'from': 'noreply',
'to': 'recipient',
'subject': mail_subject,
'text': text,
'filename': filename,
'attachment': fh.getvalue()
}
# send email using mailgun
resp = send_attachment_email(message)
# Compose an email with an attachment
def send_attachment_email(messages):
url = 'mailgun_api_url'
api = 'api-key'
load = {
"from": messages['from'],
"to": messages['to'],
"subject": messages['subject'],
"text": messages['text'],
"attachment": MultipartParam(
"attachment",
filename=messages['filename'],
filetype='application/pdf',
value=messages['attachment'])
}
payload, hd = multipart_encode(load)
hd['Authorization'] = 'Basic %s' % (base64.b64encode(api),)
resp = urlfetch.fetch(url=url, payload="".join(payload), method='POST',
headers=hd, validate_certificate=True)
logging.info(resp.status_code)
logging.info(resp.content)
return resp.status_code
defsend_mailgun(to, subject, html, file,file_name, cc, bcc):
邮筒https://api.mailgun.net/v3/DOMAIN/messages'MAILGUN_KEY='KEY-secret'
data={"subject": subject,"from":"FROM_EMAIL","to": to,"html": html}
如果抄送=“”:数据[“cc”]=cc
如果是密件抄送=“”:数据[“密件抄送”]=密件抄送
如果文件名和文件名=“”:resp=请求。post(MAILGUN_URL,auth=(“api”,MAILGUN_键),files=[(“附件”,“文件名,文件))],data=data)else:resp=requests。post(MAILGUN\u URL,auth=(“api”,MAILGUN\u键),data=data)
我们使用的军邮
API发送电子邮件使用AppEngine
和读取从云存储
,相同的原则将适用于谷歌驱动器
:
我建议的第一件事是调查StringIO。它允许您以比BytesIO更简单的方式模拟使用appengine沙箱中的文件,但两者都会生成python所称的支持的
文件对象。read()
所以这两种方法都可以。
一旦您将文件作为类似于
文件的对象
,您只需将其正确地传递给API即可。下面的示例使用requests库,因为它非常容易使用文件发布,并且与appengine兼容。
请注意,在本例中,
open(FILE_PATH_1,'rb')
是一个类文件对象
,您只需将其替换为文件对象:
def send_complex_message():
return requests.post("https://api.mailgun.net/v2/DOMAIN/messages",
auth=("api", "key-SECRET"),
files={
"attachment[0]": ("FileName1.ext", open(FILE_PATH_1, 'rb')),
"attachment[1]": ("FileName2.ext", open(FILE_PATH_2, 'rb'))
},
data={"from": "FROM_EMAIL",
"to": [TO_EMAIL],
"subject": SUBJECT,
"html": HTML_CONTENT
})
我正在将Mailgun集成到我的iOS应用程序中,并尝试发送带有附件的电子邮件。电子邮件已发送,但附件似乎已被忽略。有什么想法吗?代码如下。我使用的是AFNetworking 2,我没有使用本机的Mailgun Objective-C SDK,因为它似乎没有得到维护。 我可以使用curl发送附件,例如:
我无法正确发送带有附件的电子邮件。我正在使用Gradle和Spring 5。一切都设置正确,因为我已经发送了文本和html电子邮件。过了一段时间,我发送给客户的文本要求超过了电子邮件的限制,所以我需要将纯文本提取到CSV文件中,并将其作为附件发送到电子邮件中。看起来我只得到了所附文件的一部分,而不是完整的文件? 代码: 电子邮件正文无法正确发送。这是我在电子邮件收件箱中收到的原始邮件: 主题:报表
问题内容: 如何使用Outlook 2010发送带有附件的电子邮件(本地文件或Intranet中的文件)? 似乎不起作用。 问题答案: 不,这根本不可能。协议中对此没有规定,如果可能的话,这将是一个巨大的安全漏洞。 发送文件但让客户端发送我能想到的电子邮件的最佳方法是: 让用户选择一个文件 将文件上传到服务器 上传后让服务器返回随机文件名 在消息正文中建立一个包含上载文件的URL 的链接
问题内容: 我似乎找不到我编写的应该发送带有附件的电子邮件的php函数的问题。我已经为此苦苦挣扎了一段时间了。 编辑 问题是邮件的消息与文件混合在一起并作为附件发送。 问题答案: Artefacto让我更加关注输出,并且找到了解决方法:
问题内容: 我正在尝试在带有附件的codeigniter上发送电子邮件。 我总是成功收到电子邮件。但是,我从未收到带有附件的文件。以下是代码,非常感谢所有评论。 问题答案: $ this- >电子邮件-> attach() 使您可以发送附件。将文件路径/名称放在第一个参数中。注意:使用文件路径,而不是URL。对于多个附件,请多次使用该功能。例如:
有人能告诉我使用phpMailer发送带有附件的电子邮件的步骤吗?我已经准备好了发送电子邮件本身的所有代码,它工作正常,但我不明白如何发送附件。我有表单,如果我从POST上的文件输入中获得值,它只会给我文件名而不是完整路径。我认为为了添加附件,我需要获取文件的完整路径,对吗?我不必将文件存储在服务器上,只需通过电子邮件发送即可。