Как отправить сообщение нескольким получателям?

У меня возникли проблемы с отправкой сообщения на несколько адресов с помощью API Gmail. Я успешно отправил сообщение только на один адрес, но получаю следующую ошибку, когда я включаю несколько разделенных запятыми адресов в 'To' поле:

Произошла ошибка: https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json вернул "Недопустимо в заголовок">

Я использую CreateMessage а также SendMessage методы из этого руководства по API Gmail: https://developers.google.com/gmail/api/guides/sending

В этом руководстве говорится, что для API Gmail требуются сообщения, соответствующие RFC-2822. Мне снова не повезло, используя некоторые из этих примеров адресации в руководстве RFC-2822: https://tools.ietf.org/html/rfc2822

У меня сложилось впечатление, что 'mary@x.test, jdoe@example.org, one@y.test' должна быть допустимой строкой для передачи в параметр 'to' CreateMessage, но ошибка, которую я получил от SendMessage заставляет меня верить в обратное.

Пожалуйста, дайте мне знать, если вы можете воссоздать эту проблему, или если у вас есть какие-либо советы о том, где я могу сделать ошибку. Спасибо!

Изменить: вот фактический код, который приводит к ошибке...

def CreateMessage(sender, to, subject, message_text):
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    return {'raw': base64.urlsafe_b64encode(message.as_string())}

def SendMessage(service, user_id, message):
    try:
        message = (service.users().messages().send(userId=user_id, body=message)
           .execute())
        print 'Message Id: %s' % message['id']
        return message
    except errors.HttpError, error:
        print 'An error occurred: %s' % error

def ComposeEmail():
    # build gmail_service object using oauth credentials...
    to_addr = 'Mary Smith <mary@x.test>, jdoe@example.org, Who? <60one@y.test>'
    from_addr = 'me@address.com'
    message = CreateMessage(from_addr,to_addr,'subject text','message body')
    message = SendMessage(gmail_service,'me',message)

3 ответа

Решение

Получение "Invalid to header" при отправке с несколькими получателями (через запятую) в одном заголовке было регрессией, которая была исправлена ​​в 2014-08-25.

Как говорит Джеймс в своем комментарии, вы не должны терять время, пытаясь использовать Gmail API, когда Python имеет отличную документированную поддержку использования SMTP: email модуль может создавать сообщения, включая вложения, и smtplib отправляет их. ИМХО, вы можете использовать Gmail API для того, что работает " из коробки", но следует использовать надежные модули из стандартной библиотеки Python, когда что-то идет не так.

Похоже, вы хотите отправить только текстовое сообщение: вот решение, адаптированное из email Документация к модулю и Как отправить письмо на Python через SMTPLIB от Mkyong.com:

# Import smtplib for the actual sending function
import smtplib

# Import the email modules we'll need
from email.mime.text import MIMEText

msg = MIMEText('message body')
msg['Subject'] = 'subject text'
msg['From'] = 'me@address.com'
msg['To'] = 'Mary Smith <mary@x.test>, jdoe@example.org, "Who?" <60one@y.test>'

# Send the message via Gmail SMTP server.
gmail_user = 'youruser@gmail.com'
gmail_pwd = 'yourpassword'smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver = smtplib.SMTP('smtp.gmail.com')smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
smtpserver.send_message(msg)
smtpserver.quit()

См. Также ссылку на User.drafts - ошибка "Invalid to header"

Видимо, эта ошибка была недавно введена в Gmail API.

Другие вопросы по тегам