Каков наилучший способ перенаправить электронную почту на скрипт Python? - PullRequest
2 голосов
/ 26 апреля 2009

Я хотел бы предоставить пользователям моего веб-сайта возможность назначать адрес электронной почты при регистрации (например, firstname.lastname@mydomain.com), но я не думаю, что реально поддерживать все эти возможности учетные записи электронной почты обычно через программу веб-почты. Я также не уверен, что мой веб-хостинг будет крут с этим. Что я действительно хочу, так это иметь возможность беспрепятственной интеграции этой электронной почты в большую систему, которой является веб-сайт, поскольку в основном она предназначена для обмена сообщениями внутри сайта, но мы хотим, чтобы пользователи могли указывать реальные адреса электронной почты. , Поэтому вместо этого я хотел бы создать учетную запись для всех под mydomain, чтобы эта электронная почта смотрела входящую почту, видела, кому она должна была быть отправлена, и добавляла сообщение для пользователя в системе.

Итак, вопросы:

1) Это правильный подход? Сколько будет стоить получить хост, который позволил бы мне просто назначать электронные письма на мой домен? В настоящее время я использую общий хостинг WebFaction.
2) Если это правильный подход, как лучше всего перенаправить эту учетную запись catch all на мой скрипт на python? Я читал о .forward, но я не очень хорош в UNIX. Как только я это выясню, как заставить скрипт находиться в «среде Django», чтобы я мог использовать функциональность модели Django для добавления новых сообщений пользователю?
3) Есть ли что-то, что Django может сделать, чтобы это было проще?
4) Есть ли в Python инструменты, помогающие мне разобрать адрес электронной почты? Как они работают?

Ответы [ 4 ]

4 голосов
/ 26 апреля 2009

Чтобы прямо ответить на ваши вопросы:

1,2) Ознакомьтесь с этим FAQ на веб-сайте WebFaction. Он объясняет, как легко перенаправлять входящие письма в выбранный вами скрипт. При создании адреса электронной почты вы можете просто не указывать имя пользователя, чтобы сделать его универсальным письмом, на которое отправляется все, что отправлено на домен.

3) Как и предполагали другие, вы можете проверить django-messages , но, возможно, Django Plugables имеет что-то лучше.

4) Проверьте модуль email.parser , так как он заботится о большинстве страшных частей разбора электронных писем.

2 голосов
/ 26 апреля 2009

См. мой ответ на аналогичный вопрос. Он содержит весь основной код, с которого можно начать работу с парсером электронной почты для Django.

Редактировать : Если подумать, вот код:

Существует приложение под названием jutda-helpdesk , которое использует Python poplib и imaplib для обработки входящих писем. Вам просто нужно иметь учетную запись где-нибудь с доступом по протоколу POP3 или IMAP.

Это адаптировано из их get_email.py :

def process_mail(mb):
    print "Processing: %s" % q
    if mb.email_box_type == 'pop3':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 995
            server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 110
            server = poplib.POP3(mb.email_box_host, int(mb.email_box_port))
        server.getwelcome()
        server.user(mb.email_box_user)
        server.pass_(mb.email_box_pass)

        messagesInfo = server.list()[1]

        for msg in messagesInfo:
            msgNum = msg.split(" ")[0]
            msgSize = msg.split(" ")[1]
            full_message = "\n".join(server.retr(msgNum)[1])

            # Do something with the message

            server.dele(msgNum)
        server.quit()

    elif mb.email_box_type == 'imap':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 993
            server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 143
            server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port))
        server.login(mb.email_box_user, mb.email_box_pass)
        server.select(mb.email_box_imap_folder)
        status, data = server.search(None, 'ALL')
        for num in data[0].split():
            status, data = server.fetch(num, '(RFC822)')
            full_message = data[0][1]

            # Do something with the message

            server.store(num, '+FLAGS', '\\Deleted')
        server.expunge()
        server.close()
        server.logout()

mb - это просто какой-то объект для хранения всей информации почтового сервера, остальное должно быть достаточно ясным.

Возможно, вам понадобится проверить документы по poplib и imaplib, чтобы получить определенные части сообщения, но, надеюсь, этого достаточно, чтобы вы начали.

0 голосов
/ 26 апреля 2009

Ваш вопрос похож на этот вопрос .

Используйте проект, подобный django-messages , для обработки сообщений между вашими пользователями.

Если вы хотите, чтобы пользователи могли получать почту за пределами вашего сайта Django, вам нужно настроить MTA для обработки получения и хранения электронной почты, а затем что-то вроде procmail для извлечения его в базу данных сообщений Django.

Обычные MTA: postfix , exim и qmail . Основанные на Python перечисленные в ответах на этот вопрос

Вам также нужно будет ввести свой собственный код, чтобы каждый новый пользователь на вашем сайте Django был действительным получателем электронной почты, чтобы MTA не отклонял его.

0 голосов
/ 26 апреля 2009

но я не думаю, что это реально поддержать все эти почтовый ящик обычно через программа веб-почты

Я думаю, что ваше базовое предположение здесь неверно. Видите ли, большинство программ «веб-почты» - это всего лишь внешние интерфейсы (или клиенты) для внутренней почтовой системы (postfix и т. Д.). Вам нужно будет посмотреть, как настроен ваш веб-хостинг. Нет никаких причин, по которым вы не можете создать эти учетные записи программно, а затем позволить им использовать обычный веб-интерфейс, такой как SquirrelMail или RoundCube. Например, мой веб-хост (bluehost) позволяет мне 2500 учетных записей электронной почты - я не уверен, сколько позволяет ваш - но я могу перейти на неограниченное количество за несколько дополнительных долларов в месяц. Я думаю, что использование встроенного средства обработки электронной почты является более надежным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...