smtplib отправляет пустое сообщение, если сообщение содержит определенные символы
мой текущий скрипт позволяет мне отправлять электронные письма нормально, но есть только некоторые символы, которые ему не нравятся, особенно ':'
в этом примере.
import smtplib, sys
mensaje = sys.argv[1]
def mailto(toaddrs, msg):
fromaddr = 'myemailblabla'
username = 'thisismyemail'
password = '122344'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username, password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
mailto('test@gmail.com', mensaje)
если я напишу пример сообщения, например, скажем "Hi theren how are you?"
он работает нормально, но, скажем, я пытаюсь отправить url http://www.neopets.com
, сообщение отправляется пустым. Я верю ':'
вызывает эту проблему, поэтому я попытался избежать ее, но ничего.
2 ответов
проблема в том, что smtplib
не помещает пустую строку между заголовком сообщения и телом сообщения, как показано в форме "показать оригинал" моего теста:
Return-Path: <me@gmail.com>
Received: **REDACTED**
Fri, 03 Aug 2012 06:56:20 -0700 (PDT)
Message-ID: <501bd884.850c320b@mx.google.com>
Date: Fri, 03 Aug 2012 06:56:20 -0700 (PDT)
From: me@gmail.com
http: //www.example.com
хотя это заголовок легальной почты, агенты передачи почты и агенты пользователей Почты должны игнорировать поля заголовка, которые они не понимают. И потому, что заголовок RFC822 продолжается до первой пустой строки и http:
выглядит как строка заголовка, она будет воспринята как если бы это был заголовок. Если бы дали newline:
mensaje = '\nhttp://www.example.com'
тогда он работает так, как ожидалось. Хотя электронная почта технически нуждается только в "конверте", как предусмотрено smtplib
содержимое почты должно быть более полным, если вы ожидаете, что ваши получатели (и их отправители) будут хорошо относиться к сообщению, вы, вероятно, должны использовать почта модуль для генерации тела.
добавил
на основе doctest в smtplib.py
похоже, что это преднамеренная функция разрешение вызывающему sendmail()
добавить к заголовку:
>>> msg = '''\
... From: Me@my.org
... Subject: testin'...
...
... This is a test '''
>>> s.sendmail("me@my.org", tolist, msg)
здесь From:
и Subject:
строки являются частью" хороших " заголовков, о которых я упоминал выше.
Я не думаю, что это о толстой кишке, но это о http://
запуск сообщения.
mailto('test@gmail.com', 'http://www.url.com')
mailto('test@gmail.com', 'http://www.url.com that is a url')
mailto('test@gmail.com', ' http://www.url.com')
все плохо, но:
mailto('test@gmail.com', 'Here is a url http://www.url.com')
приходит через хорошо.