Я пытаюсь записать функцию Python для отправки электронного письма списку пользователей, с помощью значения по умолчанию установленный почтовый клиент. Я хочу открыть почтовый клиент и дать пользователю возможность отредактировать список пользователей или почтового тела.
Я сделал некоторый поиск, и согласно здесь:
http://www.sightspecific.com/~mosh/WWW_FAQ/multrec.html
Это, по-видимому, против спецификации RFC для помещения нескольких разграниченных запятой получателей в ссылку mailto. Однако это - способ, которым все другие, кажется, делают его. Какова точно современная позиция по этому?
Во всяком случае я нашел следующие два сайта:
которые, кажется, предлагают решения с помощью urllib.parse (url.parse.quote для меня), и webbrowser.open.
Я попробовал пример кода из первой ссылки (2ality.blogspot.com), и это хорошо работало и открыло мой почтовый клиент по умолчанию. Однако, когда я пытаюсь использовать код в своем собственном модуле, это, кажется, открывает мой браузер по умолчанию по некоторой странной причине. Никакой забавный текст в строке поиска, это просто открывает браузер.
email_incorrect_phone_numbers () функция находится в классе Сотрудников, который содержит словарь (employee_dict) объектов Сотрудника, которые самих имеют много атрибутов сотрудника (sn, givenName, почта и т.д.). Полный код на самом деле здесь (Python - Преобразование CSV к Объектам - Дизайн Кода)
from urllib.parse import quote
import webbrowser
....
def email_incorrect_phone_numbers(self):
email_list = []
for employee in self.employee_dict.values():
if not PhoneNumberFormats.standard_format.search(employee.telephoneNumber):
print(employee.telephoneNumber, employee.sn, employee.givenName, employee.mail)
email_list.append(employee.mail)
recipients = ', '.join(email_list)
webbrowser.open("mailto:%s?subject=%s&body=%s" %
(recipients, quote("testing"), quote('testing'))
)
Какие-либо предложения?
С наилучшими пожеланиями, Victor
Итак, раз уж вы просили совета: забудьте о схеме mailto:
и веб-браузере
, и напишите небольшой SMTP-клиент, используя Python smtplib модуль. Он стандартный, полностью поддерживается во всех системах, и в документации есть пример, из которого вы можете просто скопировать и вставить фрагменты.
Конечно, если вы используете smtplib
, вам придется запросить у пользователя детали используемого SMTP-сервера (имя хоста и порт и, возможно, логин / пароль). По общему признанию, это неудобно, поэтому я понимаю, почему вы хотите делегировать существующие программы в системе для обработки электронной почты. Проблема в том, что для этого нет системно-независимого способа. Даже модуль веб-браузера
работает не везде; некоторые люди используют системы, в которых модуль не может определить браузер по умолчанию (или любой другой), и даже если это возможно, то, что происходит, когда вы предоставляете ссылку mailto:
, полностью зависит от браузера.
Если вы не хотите или не можете использовать SMTP, лучше всего написать собственный модуль, способный обнаруживать и открывать почтовый клиент по умолчанию в максимально возможном количестве различных систем - в основном то, что модуль webbrowser
выполняет, за исключением почтовых клиентов, а не браузеров.В этом случае вам решать, какие почтовые клиенты установили ваши пользователи, и убедиться, что вы их поддерживаете. Если вы будете достаточно внимательны, вы, вероятно, сможете опубликовать свой модуль в PyPI (индекс пакета Python) и, возможно, даже включить его в будущую версию стандартной библиотеки Python - я уверен, что есть много людей, которые оценили бы что-то вроде что.