首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确格式的IMAP附加命令在Python?(雅虎邮件)

正确格式的IMAP附加命令在Python?(雅虎邮件)
EN

Stack Overflow用户
提问于 2016-08-31 11:51:09
回答 1查看 2.2K关注 0票数 1

下面的Python函数适用于outlook、gmail和我的共享主机exim服务器,但是通过yahoo.com发送邮件时会返回此错误:

代码语言:javascript
复制
APPEND command error: BAD ['[CLIENTBUG] Additional arguments found after last expected argument']. Data: FHDJ4 APPEND inbox.sent "31-Aug-2016 12:30:45 +0100" {155}

作为比较,outlook返回:

代码语言:javascript
复制
('OK', ['[APPENDUID 105 2] APPEND completed.'])

Gmail返回:

代码语言:javascript
复制
 ('OK', ['[APPENDUID 14 2] (Success)'])

Exim返回:

代码语言:javascript
复制
('OK', ['[APPENDUID 1472211409 44] Append completed (0.788 + 0.076 secs).'])

我的函数使用imaplib2,传递给它的参数都是字符串,self.username是发送电子邮件地址address@domain.com。

我的职责是:

代码语言:javascript
复制
def send_mail(self, to_addrs, subject, msgtext, verbose=False):
    # build message to send
    msg = email.message.Message()
    msg.set_unixfrom('pymotw')
    msg['From'] = self.username
    msg['To'] = to_addrs
    msg['Subject'] = subject
    msg.set_payload(msgtext)

    if verbose: print("Sending Mail:\n ", msg)

    # connect and send message
    server = self.connect_smtp()
    server.ehlo()
    server.login(self.username, self.password)
    server.sendmail(self.username, to_addrs, str(msg))
    server.quit()
    print("Saving mail to sent")
    sentbox_connection = self.imap_connection
    print(sentbox_connection.select('inbox.sent'))
    print(sentbox_connection.append('inbox.sent', None, imaplib2.Time2Internaldate(time.time()) , str(msg)))

我尝试用下面的行生成msg变量:

代码语言:javascript
复制
        msg = "From: %s\r\n" % self.username + "To: %s\r\n" % to_addrs + "Subject: %s\r\n" % subject + "\r\n" + msgtext

并使用"“而不是”无“来附加消息,如下所示:

代码语言:javascript
复制
        print(sentbox_connection.append('inbox.sent', None, imaplib2.Time2Internaldate(time.time()) , str(msg)))

你能告诉我我做错了什么吗?或者雅虎是否有一种特殊的方式来处理我需要解释的附加命令?

编辑:为了澄清,发送邮件对所有smtp服务器都正常,但是将发送的邮件附加到inbox.sent对于yahoo失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 14:23:04

我已经解决了这个问题。我注意到短信并没有以CRLF结尾。其他邮件服务器则附加此服务器端接受命令,雅虎不接受。下面的方法现在有效了。

我已经将消息有效载重线修改为: msg.set_payload("%s \r\n“% msgtext) # Yahoo在IMAP命令的末尾严格执行CRLF。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39248898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档