Gmail API - 纯文字自动换行

时间:2016-10-17 03:02:18

标签: email gmail gmail-api

使用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
    }
}

3 个答案:

答案 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对象的构造函数的这个定义:

  • class email.mime.text.MIMEText(_text [,_ subtype [,_ charset]]) 我们希望明确地将值传递给_subtype。在这种情况下,我们希望将'html'作为_subtype传递。

现在,Google,或者mime.text.MIMEText对象

对您的邮件不再有意外的自动换行

答案 2 :(得分:0)

这个确切的问题使我疯狂了好几个小时,而且找不到任何解决方案能起到任何作用。

所以,如果其他人最终在这里感到沮丧,我想我只是发布我的“解决方案”。

将您的文本(将成为电子邮件的正文)转换为简单的HTML。我将每个段落包装在一个简单的<p>中,并在需要的地方添加了换行符(<br>)(例如我的签名)。

然后,根据Andrew's answer,我将消息正文附加为MIMEText(message_text, _subtype="html")。纯文本仍然不是正确的AFAIK,但是它可以工作,而且我认为没有一个单独使用的电子邮件客户端不再能够呈现HTML。