使用Gmail API发送电子邮件时,它会在正文中放置硬线换行符,每行大约78个字符。有关此问题的类似问题可以在here找到。
我该如何停止?我只是想通过API发送纯文本电子邮件而不会有换行符。目前的格式看起来很糟糕,特别是在移动客户端上(在Gmail和iOS Mail应用程序上测试过)。
我已尝试过以下标题:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
我错过了什么吗?
编辑:根据Mr.Rebot的建议,我也试过这个没有运气:
Content-Type: mixed/alternative
编辑2:以下是我发送的邮件的确切格式(尝试使用和不使用quoted-printable
标头:
From: Example Account <example1@example.com>
To: <example2@example.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Subject: This is a test!
Date: Tue, 18 Oct 2016 10:46:57 -GMT-07:00
Here is a long test message that will probably cause some words to wrap in strange places.
我接受完整的消息并对其进行Base64编码,然后使用以下JSON正文将其发布到/gmail/v1/users/{my_account}/drafts/send?fields=id
:
{
"id": MSG_ID,
"message": {
"raw": BASE64_DATA
}
}
答案 0 :(得分:2)
您是通过quoted printable编码器运行内容并将编码内容值与标头一起发送还是希望API为您编码?
每wikipedia看起来,如果你添加的{(1}}小于76个字符的软换行符作为任意行上的最后一个字符,它们应该从恢复原始文本的结果中解码出来。
<强>更新
尝试使用此内容进行发送,该内容的消息已被引用 - 可打印编码(base64 it):
public extension NSDate {
public func elapsedTimeString(toDate: NSDate? = NSDate()) -> String {
let distanceBetweenDates = toDate!.timeIntervalSinceDate(self)
let minutes = distanceBetweenDates / 60
switch minutes {
case 0..<1:
return "now"
case 1..<60:
return "Int64(minutes) mins ago"
case 60..<(60 * 24):
return "Int64(minutes / 60) hour(s) ago"
case (60 * 24)..<(60 * 24 * 7):
return "Int64(minutes / (60 * 24)) week(s) ago"
default:
// somehow the date is ahead? so consider it now
if minutes < 0 {
return "now"
}
return "Int64(minutes / (60 * 24 * 7)) week(s) ago"
}
}
}
答案 1 :(得分:0)
我假设你有类似的功能:
1. def create_message(sender, to, cc, subject, message_body): 2. message = MIMEText(message_body, 'html') 3. message['to'] = to 4. message['from'] = sender 5. message['subject'] = subject 6. message['cc'] = cc 7. return {'raw': base64.urlsafe_b64encode(message.as_string())}
最终为我工作的一个技巧,在所有修改标头值和有效负载dict(它是message
对象的成员)的尝试之后,是设置( line 2
):
message = MIMEText(message_body, 'html')
&lt; - 添加'html'
作为MIMEText对象构造函数的第二个参数 Google 为其gmail API提供的默认代码仅告诉您如何发送纯文本电子邮件,但它们隐藏了他们如何执行此操作。
翼...
message = MIMEText(message_body)
我必须查找python类email.mime.text.MIMEText
对象。
您可以在这里看到MIMEText对象的构造函数的这个定义:
_subtype
。在这种情况下,我们希望将'html'
作为_subtype
传递。 现在,Google,或者mime.text.MIMEText
对象
答案 2 :(得分:0)
这个确切的问题使我疯狂了好几个小时,而且找不到任何解决方案能起到任何作用。
所以,如果其他人最终在这里感到沮丧,我想我只是发布我的“解决方案”。
将您的文本(将成为电子邮件的正文)转换为简单的HTML。我将每个段落包装在一个简单的<p>
中,并在需要的地方添加了换行符(<br>
)(例如我的签名)。
然后,根据Andrew's answer,我将消息正文附加为MIMEText(message_text, _subtype="html")
。纯文本仍然不是正确的AFAIK,但是它可以工作,而且我认为没有一个单独使用的电子邮件客户端不再能够呈现HTML。