Python - Откройте почтовый клиент по умолчанию, использующий mailto с несколькими получателями

Я пытаюсь записать функцию 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

5
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Итак, раз уж вы просили совета: забудьте о схеме mailto: и веб-браузере , и напишите небольшой SMTP-клиент, используя Python smtplib модуль. Он стандартный, полностью поддерживается во всех системах, и в документации есть пример, из которого вы можете просто скопировать и вставить фрагменты.

Конечно, если вы используете smtplib , вам придется запросить у пользователя детали используемого SMTP-сервера (имя хоста и порт и, возможно, логин / пароль). По общему признанию, это неудобно, поэтому я понимаю, почему вы хотите делегировать существующие программы в системе для обработки электронной почты. Проблема в том, что для этого нет системно-независимого способа. Даже модуль веб-браузера работает не везде; некоторые люди используют системы, в которых модуль не может определить браузер по умолчанию (или любой другой), и даже если это возможно, то, что происходит, когда вы предоставляете ссылку mailto: , полностью зависит от браузера.

Если вы не хотите или не можете использовать SMTP, лучше всего написать собственный модуль, способный обнаруживать и открывать почтовый клиент по умолчанию в максимально возможном количестве различных систем - в основном то, что модуль webbrowser выполняет, за исключением почтовых клиентов, а не браузеров.В этом случае вам решать, какие почтовые клиенты установили ваши пользователи, и убедиться, что вы их поддерживаете. Если вы будете достаточно внимательны, вы, вероятно, сможете опубликовать свой модуль в PyPI (индекс пакета Python) и, возможно, даже включить его в будущую версию стандартной библиотеки Python - я уверен, что есть много людей, которые оценили бы что-то вроде что.

3
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: