Как отправлять электронную почту в веб-приложении на Django

Оглавление (нажмите, чтобы открыть):

Отправляем email из сайта на Django

Почта — неотъемлемая часть любого современного сайта.
К счастью в django существует простой и удобный механизм для отправки уведомлений по почте.

Предусмотрены функции send_mail() и send_mass_mail()
Их различие в том, что первая создаёт соединения для отправки каждого письма, вторая же соеденяется с smtp сервером 1 раз и отправляет всю накопившуюся почту.

И отправляем когда нужно:

Как видите, первый параметр — тема письма, второй собственно письмо, третий ваш mail, четвёртый — массив адресов, на которые шлём. И последний — флаг, который сообщает программе, нужно ли молчать в случаее неудачной отправки.

Удобно пользоваться второй функцией вот так:

Вот и всё что нужно знать, чтобы наладить отправку почты 😉

Отправка электронной почты Django

Django поставляется с готовым и простым в использовании легковесным движком для отправки электронной почты. Для его использования вам просто нужно импортировать django.core.mail. Чтобы начать отправку электронной почты, отредактируйте файл проекта settings.py и установите следующие параметры:

  • EMAIL_HOST — адрес SMTP-сервера.
  • EMAIL_HOST_USER — учётная запись для входа на SMTP-сервер.
  • EMAIL_HOST_PASSWORD — пароль от учётной записи для входа на SMTP-сервер.
  • EMAIL_PORT — порт SMTP-сервера.
  • EMAIL_USE_TLS или _SSL — True, если используется безопасное соединение.

Отправка простого электронного письма

Давайте создадим представление sendSimpleEmail для отправки простого электронного письма.

send_mail принимает следующие параметры:

  • subject − тема электронного письма.
  • message − тело электронного письма.
  • from_email − электронная почта отправителя.
  • recipient_list − список адресов электронных почт получателей.
  • fail_silently − при значении false send_mail вызовет исключение в случае ошибки.
  • auth_user − учетная запись пользователя, если она не указана в settings.py.
  • auth_password − пароль от учётной записи, если он не указан в settings.py.
  • connection − бэкенд электронной почты.
  • html_message − (начиная с Django 1.7) если данный параметр присутствует, то электронное письмо будет составным.

Давайте создадим URL для доступа к нашему представлению:

При доступе к /myapp/simpleemail/[email protected] вы получите следующую страницу:

Отправка нескольких писем с помощью send_mass_mail

Метод возвращает количество успешно доставленных сообщений. Это то же самое, что send_mail, но с дополнительным параметром datatuples. Тогда наше представление sendMassEmail примет следующий вид:

Давайте создадим URL для доступа к нашему представлению:

При доступе к /myapp/massemail/[email protected]/[email protected]/ мы получим:

send_mass_mail принимает следующие параметры:

  • datatuples — кортеж элементов следующего вида: тема, сообщение, почта отправителя, список получателей.
  • fail_silently − при значении false send_mass_mail вызовет исключение в случае ошибки.
  • auth_user − учетная запись пользователя, если она не указана в settings.py.
  • auth_password − пароль от учётной записи, если он не указан в settings.py.
  • connection − бэкенд электронной почты.

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

Примечание. В этом примере мы используем Python smtp debuggingserver, который вы можете запустить с помощью:

Эта строчка означает, что все отправленные вами электронные письма будут напечатаны в стандартном системном выводе stdout, а фиктивный сервер будет работать на localhost:1025.

Отправка электронной почты администраторам и менеджерам с помощью методов mail_admins и mail_manager

Эти методы отправляют электронные письма администраторам сайта, которые определены в параметре ADMINS файла settings.py, и менеджерам сайта, которые определено в параметре MANAGERS файла settings.py. Давайте предположим, что наши параметры ADMINS и MANAGERS выглядят следующим образом:

Приведенный выше код отправит электронное письмо каждому администратору, указанному в ADMINS.

Приведенный выше код отправит электронное письмо каждому менеджеру, указанному в MANAGERS.

  • subject − тема электронного письма.
  • message − тело электронного письма.
  • fail_silently − при значении false вызовет исключение в случае ошибки.
  • connection − бэкенд электронной почты.
  • html_message − (начиная с Django 1.7) если данный параметр присутствует, то электронное письмо будет составным.

Отправка электронной почты в формате HTML

Отправка HTML-сообщения в Django> = 1.7:

Данный код создает составное электронное письмо.

Отправка электронных писем с вложением

Это делается с помощью метода attach объекта EmailMessage.

Представление для отправки электронного письма с вложением будет следующим:

attach принимает следующие аргументы:

  • filename — имя файла-вложения.
  • content — содержимое файла-вложения.
  • mimetype — mime-тип его содержимого.

Джанго отправлять и получать электронную почту?

Я получил довольно знаком с электронной почтой отправкой способностями Джанго, но я havn’t видел ничего о его получении и обработки сообщений от пользователей. Является ли эта функция доступна?

Несколько Google поиски не появились весьма обнадеживающие результаты. Хотя я нашел это: получать и отправлять электронную почту в питоне

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

Обновление : Я не пытаюсь сделать сервер электронной почты, мне просто нужно добавить некоторые функции , где вы можете по электронной почте изображения на сайт и он всплывал в вашем аккаунте.

Там есть приложение под названием jutda-служба поддержка , которая использует Питон poplib и imaplib для обработки входящих сообщений электронной почты. Вы просто должны иметь учетную запись где — то с POP3 или IMAP доступ.

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

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

Я знаю , этот вопрос довольно стар , но просто подумал , что я хотел бы добавить в будущем , что вы могли бы хотеть дать https://cloudmailin.com идти. У нас есть довольно много пользователей Джанго , используя систему , и она должна быть немного проще , чем предложенное решение.

Джанго действительно предназначен в качестве веб-сервера (ну, в качестве основы, которая вписывается в веб-сервер), а не в качестве почтового сервера. Я полагаю, вы могли бы поместить некоторый код в веб-приложение Django, который начинается на сервер электронной почты, используя такой код, показанный в этом вопросе вы связаны, но я действительно не рекомендовал бы его; это злоупотребление возможностями динамического веб-программирования.

Нормальная практика должна иметь отдельный адрес электронной почты и веб-серверов, и для этого вы хотели бы посмотреть в нечто вроде Sendmail или (еще лучше) Postfix. Для POP3 вы также нужно что-то вроде Dovecot или Courier, я думаю. (Это, конечно, можно иметь сервер электронной почты уведомить ваш веб-приложения при получении сообщений электронной почты, чтобы он мог действовать на них, если это то, что вы хотите сделать.)

EDIT : в ответ на Ваши комментарии: да вы пытаетесь сделать (или по крайней мере использования) сервера электронной почты. Сервер электронной почты является просто программа , которая получает электронную почту (и может быть способен посылать их как хорошо, но вам это не нужно).

Можно определенно написать небольшой сервер электронной почты в Python, который просто получает эти письма и сохраняет изображения в файловой системе или в базе данных или любой другой. (Может быть, стоит задать новый вопрос, о) Но не делайте это часть вашего веб-приложения Django; держать его в качестве своей собственной отдельной программы.

django send_mail отправка писем от любого адресата

Подскажите, пожалуйста, как можно отправлять письма от любого адресата? У меня в .settings.py прописаны следующие настройки

Далее в shell следующий код работает

send_mail(‘Django mail’, ‘This e-mail was send with Django.’, ‘yandexUser@ya.ru’, [‘mySecondMail@gmail.com’], fail_silently=False)

А вот так уже не работает

send_mail(‘Django mail’, ‘This e-mail was send with Django.’, ‘info@any-site.ru’, [‘mySecondMail@gmail.com’], fail_silently=False)

На php у меня с этим проблем нет, я так же использую в качестве почтового сервера Yandex или Google, а в качестве адресата подставляю любой адрес.

Documentation

Sending email¶

Although Python makes sending email relatively easy via the smtplib module, Django provides a couple of light wrappers over it. These wrappers are provided to make sending email extra quick, to make it easy to test email sending during development, and to provide support for platforms that can’t use SMTP.

The code lives in the django.core.mail module.

Quick example¶

Mail is sent using the SMTP host and port specified in the EMAIL_HOST and EMAIL_PORT settings. The EMAIL_HOST_USER and EMAIL_HOST_PASSWORD settings, if set, are used to authenticate to the SMTP server, and the EMAIL_USE_TLS and EMAIL_USE_SSL settings control whether a secure connection is used.

The character set of email sent with django.core.mail will be set to the value of your DEFAULT_CHARSET setting.

send_mail() ¶

The simplest way to send email is using django.core.mail.send_mail() .

The subject , message , from_email and recipient_list parameters are required.

  • subject : A string.
  • message : A string.
  • from_email : A string.
  • recipient_list : A list of strings, each an email address. Each member of recipient_list will see the other recipients in the “To:” field of the email message.
  • fail_silently : A boolean. When it’s False , send_mail() will raise an smtplib.SMTPException if an error occurs. See the smtplib docs for a list of possible exceptions, all of which are sub > SMTPException .
  • auth_user : The optional username to use to authenticate to the SMTP server. If this isn’t prov > EMAIL_HOST_USER setting.
  • auth_password : The optional password to use to authenticate to the SMTP server. If this isn’t prov > EMAIL_HOST_PASSWORD setting.
  • connection : The optional email backend to use to send the mail. If unspecified, an instance of the default backend will be used. See the documentation on Email backends for more details.
  • html_message : If html_message is prov >multipart/alternative email with message as the text/plain content type and html_message as the text/html content type.
Мастер Йода рекомендует:  Введение в DNS-записи

The return value will be the number of successfully delivered messages (which can be 0 or 1 since it can only send one message).

send_mass_mail() ¶

django.core.mail.send_mass_mail() is intended to handle mass emailing.

datatuple is a tuple in which each element is in this format:

fail_silently , auth_user and auth_password have the same functions as in send_mail() .

Each separate element of datatuple results in a separate email message. As in send_mail() , recipients in the same recipient_list will all see the other addresses in the email messages’ “To:” field.

For example, the following code would send two different messages to two different sets of recipients; however, only one connection to the mail server would be opened:

The return value will be the number of successfully delivered messages.

send_mass_mail() vs. send_mail() ¶

The main difference between send_mass_mail() and send_mail() is that send_mail() opens a connection to the mail server each time it’s executed, while send_mass_mail() uses a single connection for all of its messages. This makes send_mass_mail() slightly more efficient.

mail_admins() ¶

django.core.mail.mail_admins() is a shortcut for sending an email to the site admins, as defined in the ADMINS setting.

mail_admins() prefixes the subject with the value of the EMAIL_SUBJECT_PREFIX setting, which is «[Django] » by default.

The “From:” header of the email will be the value of the SERVER_EMAIL setting.

This method exists for convenience and readability.

If html_message is prov >multipart/alternative email with message as the text/plain content type and html_message as the text/html content type.

mail_managers() ¶

django.core.mail.mail_managers() is just like mail_admins() , except it sends an email to the site managers, as defined in the MANAGERS setting.

Examples¶

This sends a single email to john @ example . com and jane @ example . com, with them both appearing in the “To:”:

This sends a message to john @ example . com and jane @ example . com, with them both receiving a separate email:

Preventing header injection¶

Header injection is a security exploit in which an attacker inserts extra email headers to control the “To:” and “From:” in email messages that your scripts generate.

The Django email functions outlined above all protect against header injection by forb > subject , from_email or recipient_list contains a newline (in either Unix, Windows or Mac style), the email function (e.g. send_mail() ) will raise django.core.mail.BadHeaderError (a sub > ValueError ) and, hence, will not send the email. It’s your responsibility to validate all data before passing it to the email functions.

If a message contains headers at the start of the string, the headers will simply be printed as the first bit of the email message.

Here’s an example view that takes a subject , message and from_email from the request’s POST data, sends that to admin @ example . com and redirects to “/contact/thanks/” when it’s done:

The EmailMessage class¶

Django’s send_mail() and send_mass_mail() functions are actually thin wrappers that make use of the EmailMessage class.

Not all features of the EmailMessage > send_mail() and related wrapper functions. If you wish to use advanced features, such as BCC’ed recipients, file attachments, or multi-part email, you’ll need to create EmailMessage instances directly.

This is a design feature. send_mail() and related functions were originally the only interface Django provided. However, the list of parameters they accepted was slowly growing over time. It made sense to move to a more object-oriented design for email messages and retain the original functions only for backwards compatibility.

EmailMessage is responsible for creating the email message itself. The email backend is then responsible for sending the email.

For convenience, EmailMessage prov > send() method for sending a single email. If you need to send multiple messages, the email backend API provides an alternative .

EmailMessage Objects¶

  • subject : The subject line of the email.
  • body : The body text. This should be a plain text message.
  • from_email : The sender’s address. Both fred@example.com and «Fred» forms are legal. If omitted, the DEFAULT_FROM_EMAIL setting is used.
  • to : A list or tuple of recipient addresses.
  • bcc : A list or tuple of addresses used in the “Bcc” header when sending the email.
  • connection : An email backend instance. Use this parameter if you want to use the same connection for multiple messages. If omitted, a new connection is created when send() is called.
  • attachments : A list of attachments to put on the message. These can be either MIMEBase instances, or (filename, content, mimetype) triples.
  • headers : A dictionary of extra headers to put on the message. The keys are the header name, values are the header values. It’s up to the caller to ensure header names and values are in the correct format for an email message. The corresponding attribute is extra_headers .
  • cc : A list or tuple of recipient addresses used in the “Cc” header when sending the email.
  • reply_to : A list or tuple of recipient addresses used in the “Reply-To” header when sending the email.

The class has the following methods:

send(fail_silently=False) sends the message. If a connection was specified when the email was constructed, that connection will be used. Otherwise, an instance of the default backend will be instantiated and used. If the keyword argument fail_silently is True , exceptions raised while sending the message will be quashed. An empty list of recipients will not raise an exception.

message() constructs a django.core.mail.SafeMIMEText object (a sub > MIMEText > django.core.mail.SafeMIMEMultipart object holding the message to be sent. If you ever need to extend the EmailMessage class, you’ll probably want to override this method to put the content you want into the MIME object.

recipients() returns a list of all the recipients of the message, whether they’re recorded in the to , cc or bcc attributes. This is another method you might need to override when subclassing, because the SMTP server needs to be told the full list of recipients when the message is sent. If you add another way to specify recipients in your class, they need to be returned from this method as well.

attach() creates a new file attachment and adds it to the message. There are two ways to call attach() :

You can pass it a single argument that is a MIMEBase instance. This will be inserted directly into the resulting message.

Alternatively, you can pass attach() three arguments: filename , content and mimetype . filename is the name of the file attachment as it will appear in the email, content is the data that will be contained ins > mimetype is the optional MIME type for the attachment. If you omit mimetype , the MIME content type will be guessed from the filename of the attachment.

If you specify a mimetype of message/rfc822 , it will also accept django.core.mail.EmailMessage and email.message.Message .

For a mimetype starting with text/ , content is expected to be a string. Binary data will be decoded using UTF-8, and if that fails, the MIME type will be changed to application/octet-stream and the data will be attached unchanged.

In addition, message/rfc822 attachments will no longer be base64-encoded in violation of RFC 2046#section-5.2.1, which can cause issues with displaying the attachments in Evolution and Thunderbird.

attach_file() creates a new attachment using a file from your filesystem. Call it with the path of the file to attach and, optionally, the MIME type to use for the attachment. If the MIME type is omitted, it will be guessed from the filename. The simplest use would be:

For MIME types starting with text/ , binary data is handled as in attach() .

Sending alternative content types¶

It can be useful to include multiple versions of the content in an email; the > EmailMultiAlternatives > EmailMessage has an attach_alternative() method for including extra versions of the message body in the email. All the other methods (including the > EmailMessage .

To send a text and HTML combination, you could write:

By default, the MIME type of the body parameter in an EmailMessage is «text/plain» . It is good practice to leave this alone, because it guarantees that any recipient will be able to read the email, regardless of their mail client. However, if you are conf > content_subtype attribute on the EmailMessage > «text» , but you can change the subtype. For example:

Мастер Йода рекомендует:  LG Display разработала ИИ-систему для борьбы с тошнотой в VR

Email backends¶

The actual sending of an email is handled by the email backend.

The email backend class has the following methods:

  • open() instantiates a long-lived email-sending connection.
  • close() closes the current email-sending connection.
  • send_messages(email_messages) sends a list of EmailMessage objects. If the connection is not open, this call will implicitly open the connection, and close the connection afterwards. If the connection is already open, it will be left open after mail has been sent.

It can also be used as a context manager, which will automatically call open() and close() as needed:

Obtaining an instance of an email backend¶

The get_connection() function in django.core.mail returns an instance of the email backend that you can use.

By default, a call to get_connection() will return an instance of the email backend specified in EMAIL_BACKEND . If you specify the backend argument, an instance of that backend will be instantiated.

The fail_silently argument controls how the backend should handle errors. If fail_silently is True, exceptions during the email sending process will be silently ignored.

All other arguments are passed directly to the constructor of the email backend.

Django ships with several email sending backends. With the exception of the SMTP backend (which is the default), these backends are only useful during testing and development. If you have special email sending requirements, you can write your own email backend .

SMTP backend¶

This is the default backend. Email will be sent through a SMTP server.

The value for each argument is retrieved from the matching setting if the argument is None :

The SMTP backend is the default configuration inherited by Django. If you want to specify it explicitly, put the following in your settings:

Console backend¶

Instead of sending out real emails the console backend just writes the emails that would be sent to the standard output. By default, the console backend writes to stdout . You can use a different stream-like object by prov > stream keyword argument when constructing the connection.

To specify this backend, put the following in your settings:

This backend is not intended for use in production – it is provided as a convenience that can be used during development.

File backend¶

The file backend writes emails to a file. A new file is created for each new session that is opened on this backend. The directory to which the files are written is either taken from the EMAIL_FILE_PATH setting or from the file_path keyword when creating a connection with get_connection() .

To specify this backend, put the following in your settings:

This backend is not intended for use in production – it is provided as a convenience that can be used during development.

In-memory backend¶

The ‘locmem’ backend stores messages in a special attribute of the django.core.mail module. The outbox attribute is created when the first message is sent. It’s a list with an EmailMessage instance for each message that would be sent.

To specify this backend, put the following in your settings:

This backend is not intended for use in production – it is provided as a convenience that can be used during development and testing.

Dummy backend¶

As the name suggests the dummy backend does nothing with your messages. To specify this backend, put the following in your settings:

This backend is not intended for use in production – it is provided as a convenience that can be used during development.

Defining a custom email backend¶

If you need to change how emails are sent you can write your own email backend. The EMAIL_BACKEND setting in your settings file is then the Python import path for your backend class.

Custom email backends should sub > BaseEmailBackend that is located in the django.core.mail.backends.base module. A custom email backend must implement the send_messages(email_messages) method. This method receives a list of EmailMessage instances and returns the number of successfully delivered messages. If your backend has any concept of a persistent session or connection, you should also implement the open() and close() methods. Refer to smtp.EmailBackend for a reference implementation.

Sending multiple emails¶

Establishing and closing an SMTP connection (or any other network connection, for that matter) is an expensive process. If you have a lot of emails to send, it makes sense to reuse an SMTP connection, rather than creating and destroying a connection every time you want to send an email.

There are two ways you tell an email backend to reuse a connection.

Firstly, you can use the send_messages() method. send_messages() takes a list of EmailMessage instances (or subclasses), and sends them all using a single connection.

For example, if you have a function called get_notification_email() that returns a list of EmailMessage objects representing some periodic email you wish to send out, you could send these emails using a single call to send_messages:

In this example, the call to send_messages() opens a connection on the backend, sends the list of messages, and then closes the connection again.

The second approach is to use the open() and close() methods on the email backend to manually control the connection. send_messages() will not manually open or close the connection if it is already open, so if you manually open the connection, you can control when it is closed. For example:

Configuring email for development¶

There are times when you do not want Django to send emails at all. For example, while developing a website, you probably don’t want to send out thousands of emails – but you may want to validate that emails will be sent to the right people under the right conditions, and that those emails will contain the correct content.

The easiest way to configure email for local development is to use the console email backend. This backend redirects all email to stdout, allowing you to inspect the content of mail.

The file email backend can also be useful during development – this backend dumps the contents of every SMTP connection to a file that can be inspected at your leisure.

Another approach is to use a “dumb” SMTP server that receives the emails locally and displays them to the terminal, but does not actually send anything. Python has a built-in way to accomplish this with a single command:

This command will start a simple SMTP server listening on port 1025 of localhost. This server simply prints to standard output all email headers and the email body. You then only need to set the EMAIL_HOST and EMAIL_PORT accordingly. For a more detailed discussion of SMTP server options, see the Python documentation for the smtpd module.

For information about unit-testing the sending of emails in your application, see the Email services section of the testing documentation.

Как отправлять электронную почту в веб-приложении на Django

1569 просмотра

1 ответ

30 Репутация автора

Я создаю пользователя, отправляя запрос POST через приложение для Android с запросом, содержащим имя пользователя, пароль и идентификатор электронной почты. Сейчас в моем приложении есть два типа пользователей: учителя и студенты . Теперь, чтобы провести различие между учителями и учениками во время регистрации, я хочу отправить учителю электронное письмо с подтверждением, содержащее случайно сгенерированный токен. Теперь я хочу, чтобы учитель вводил этот токен во время регистрации, чтобы убедиться, что на самом деле учитель подписывается, а не какой-то озорной ученик, который просто хочет все испортить. Я могу отправить электронное письмо, содержащее токен, но не могу понять, как я смогу проверить его, когда учитель вводит токен в приложение во время регистрации, совпадает с токеном, отправленным на идентификатор электронной почты.

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

Как вы видите, в приведенном выше коде я генерирую случайный токен и отправляю электронное письмо, когда получаю POST-запрос на создание нового пользователя. Теперь мой пользователь будет вводить токен из электронной почты в приложении и отправлять запрос POST. Теперь я хочу проверить, совпадает ли токен, введенный пользователем, с токеном, сгенерированным выше в коде, чтобы я мог проверить пользователя и перейти к форме регистрации.

PS: Моя модель User не содержит поле токена, так как я использую встроенную пользовательскую модель, предоставленную Django, и подключаю ее к модели Учителя с помощью One-To-One-Field.

PPS: Есть ли другой способ, который я могу использовать для реализации вышеуказанных функций?

Ответы (1)

1 плюс

2516 Репутация автора

Вам нужно сохранить токен на вашей стороне (базу данных), чтобы он совпадал с токеном, который учитель вводит в вашу форму. Поэтому сначала сделайте модель.

Строка, которая генерирует токен, приходит после создания пользователя, поэтому вы можете просто использовать пользовательский экземпляр и сохранить токен в только что созданной модели:

Затем вы используете следующий код, чтобы проверить, правильно ли пользователь ввел правильный токен:

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

Как проверить отправку электронной почты из веб-приложения в OSX?

У меня есть приложение Django, работающее локально, и я хотел бы проверить функциональность «send_mail()». В настоящее время, я могу включить постфикс, используя следующую команду в терминале:

Мастер Йода рекомендует:  ASP.NET 2.0. Обзор новых сервисов, элементов управления и средств

После того, как я перехожу на постфиксе, я запускаю следующую команду в терминале:

Этих два шага, кажется, работать, потому что функция send_mail() не прерывается или приводит к исключению. К сожалению, я не уверен, что мне нужно сделать, чтобы увидеть отправленные электронные письма. Я попытался настроить Mail.app для подключения к localhost, но такой удачи не было.

У кого-нибудь есть представление о том, что мне нужно сделать, чтобы увидеть электронные письма, которые отправляет постфикс?

Создан 21 июн. 10 2010-06-21 15:54:08 Huuuze

4 ответа

вы можете попробовать использовать сервер тестирования электронной почты django?

писем будут просто перечислены как вы посылаете их.

Создан 21 июн. 10 2010-06-21 15:58:54 JamesO

Ха . возможно, я должен закончить готовую страницу в следующий раз. Это достаточно хорошо для моих целей. Благодаря! – Huuuze 21 июн. 10 2010-06-21 16:08:16

Прохладный, просто добавив ‘EMAIL_BACKEND = ‘django.core.mail.backends.console.EmailBackend» сделал трюк для меня. Благодаря! – metakermit 17 ноя. 13 2013-11-17 19:21:31

Посмотрите журнал постфикса или почтовую очередь. Если сообщения создаются в очереди, то следующая задача — настроить ваш постфикс для пересылки сообщений на удаленные MTA . который является вопросом serverfault.com;).

Создан 21 июн. 10 2010-06-21 15:58:38 Anonymous

Postfix попытается доставить почту в систему, которую вы назвали. Это может быть неудачно по различным причинам, например:

  1. Адрес не существует.
  2. Удаленный почтовый сервер отклонил его.
  3. Ваш ISP блокирует порт 25 исходящий, поэтому постфикс ничего не может доставить.

Вы можете увидеть в очередь письма с Sendmail псевдоним mailq (должны быть sudo ). Postfix также ведет подробные журналы в /var/log

Если вы отправляете на @localhost, вам также нужно настроить сервер POP3 или IMAP для вашей системы на Mail.app , чтобы читать электронную почту. Без использования Mail.app вы можете найти системную почтовую катушку ( /var/mail — обычное место).

Создан 21 июн. 10 2010-06-21 16:00:18 Yann Ramin

Тест-сервер электронной почты замечательный, но его сложно предварительно просмотреть html-адрес электронной почты. Бесстыдный штепсель, но у меня есть developed an app, чтобы помочь с ним.

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

Создан 21 июн. 10 2010-06-21 21:18:40 Arthur Debert

Skycker / gist:10557009

# In settings.py
# Email settings
EMAIL_HOST = ‘ smtp.gmail.com ‘
EMAIL_HOST_USER = ‘ smolgu.bureau.website@gmail.com ‘
EMAIL_HOST_PASSWORD = ‘ bureausmolgu ‘
EMAIL_PORT = 587
EMAIL_USE_TLS = True
# In views.py
from django.forms import ModelForm
class ContactUsForm ( ModelForm ):
class Meta :
model = MailBox
fields = [ ‘ subject ‘ , ‘ message ‘ , ‘ sender ‘ ]
def contact_us ( request ):
path_back = request. META .get( ‘ HTTP_REFERER ‘ , ‘ / ‘ )
if request.method == ‘ POST ‘ : # If the form has been submitted.
contact_form = ContactUsForm(request. POST ) # A form bound to the POST data
if contact_form.is_val > # All validation rules pass
subject = contact_form.cleaned_data[ ‘ subject ‘ ]
sender = contact_form.cleaned_data[ ‘ sender ‘ ]
message = ‘ Письмо было отправлено с сайта, адрес для ответа %s \r\n \r\n ‘ % sender
message += contact_form.cleaned_data[ ‘ message ‘ ]
# recipients = [‘Bureau@smolgu.ru’]
recipients = [ ‘ skymorr@yandex.ru ‘ ]
# Положим копию письма в базу на всякий случай
MailBox.objects.create( subject = subject, sender = sender, message = message)
# и отправим его
try :
send_mail(subject, message, sender, recipients, fail_silently = False )
except :
send_mail(subject, message, sender, recipients, fail_silently = False )
return render_to_response( ‘ web_site/success.html ‘ , < ' path_back ' : path_back>, context_instance = RequestContext(request))
return render_to_response( ‘ web_site/fail.html ‘ , context_instance = RequestContext(request))
# In template.html
form method = » post » action = » <% url 'contact_us' %>» >
div class = » row half » >
div class = » 6u » >
input name = » subject » placeholder = » Тема письма » type = » text » class = » text » / >
/ div >
div class = » 6u » >
input name = » sender » placeholder = » Ваш email для ответа » type = » text » class = » text » / >
/ div >
/ div >
div class = » row half » >
div class = » 12u » >
textarea name = » message » placeholder = » Текст письма » > / textarea >
/ div >
/ div >
div class = » row half » >
div class = » 12u » >
a href = » # » class = » button button-icon fa fa-envelope » > Написать нам / a >
input class = » button button-icon fa fa-envelope » type = » submit » value = » Отправить письмо » / >
/ div >
/ div >
/ form >
  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Как проверить отправку электронной почты из веб-приложения в OSX?

У меня есть приложение Django, работающее локально, и я хотел бы проверить функциональность «send_mail()». В настоящее время, я могу включить постфикс, используя следующую команду в терминале:

После того, как я перехожу на постфиксе, я запускаю следующую команду в терминале:

Этих два шага, кажется, работать, потому что функция send_mail() не прерывается или приводит к исключению. К сожалению, я не уверен, что мне нужно сделать, чтобы увидеть отправленные электронные письма. Я попытался настроить Mail.app для подключения к localhost, но такой удачи не было.

У кого-нибудь есть представление о том, что мне нужно сделать, чтобы увидеть электронные письма, которые отправляет постфикс?

Создан 21 июн. 10 2010-06-21 15:54:08 Huuuze

4 ответа

вы можете попробовать использовать сервер тестирования электронной почты django?

писем будут просто перечислены как вы посылаете их.

Создан 21 июн. 10 2010-06-21 15:58:54 JamesO

Ха . возможно, я должен закончить готовую страницу в следующий раз. Это достаточно хорошо для моих целей. Благодаря! – Huuuze 21 июн. 10 2010-06-21 16:08:16

Прохладный, просто добавив ‘EMAIL_BACKEND = ‘django.core.mail.backends.console.EmailBackend» сделал трюк для меня. Благодаря! – metakermit 17 ноя. 13 2013-11-17 19:21:31

Посмотрите журнал постфикса или почтовую очередь. Если сообщения создаются в очереди, то следующая задача — настроить ваш постфикс для пересылки сообщений на удаленные MTA . который является вопросом serverfault.com;).

Создан 21 июн. 10 2010-06-21 15:58:38 Anonymous

Postfix попытается доставить почту в систему, которую вы назвали. Это может быть неудачно по различным причинам, например:

  1. Адрес не существует.
  2. Удаленный почтовый сервер отклонил его.
  3. Ваш ISP блокирует порт 25 исходящий, поэтому постфикс ничего не может доставить.

Вы можете увидеть в очередь письма с Sendmail псевдоним mailq (должны быть sudo ). Postfix также ведет подробные журналы в /var/log

Если вы отправляете на @localhost, вам также нужно настроить сервер POP3 или IMAP для вашей системы на Mail.app , чтобы читать электронную почту. Без использования Mail.app вы можете найти системную почтовую катушку ( /var/mail — обычное место).

Создан 21 июн. 10 2010-06-21 16:00:18 Yann Ramin

Тест-сервер электронной почты замечательный, но его сложно предварительно просмотреть html-адрес электронной почты. Бесстыдный штепсель, но у меня есть developed an app, чтобы помочь с ним.

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

Создан 21 июн. 10 2010-06-21 21:18:40 Arthur Debert

Отслеживать электронные письма клиентам в веб-приложении — django

Я разрабатываю систему на основе Django. Это своего рода инструмент отслеживания клиентов.

Некоторые пользователи могут работать с разными учетными записями клиентов.

Я хотел бы отслеживать электронные письма среди пользователей и клиентов в приложении.

Компания использует MS Outlook Server в качестве почтового сервера, и пользователи отправляют электронные письма со своих рабочих станций.

Цель состоит в том, чтобы иметь список писем от пользователей/клиентов на веб-странице.

Я вижу некоторые возможные способы, как это сделать.

  • Сделайте форму электронной почты на веб-странице и отправьте все электронные письма с этой страницы. Таким образом, мы можем сохранить отправленное электронное письмо.
  • При отправке электронной почты вручную добавьте поле CC с адресом робота, который будет иметь доступ к этому потоку почты и может получать сообщения из почтового ящика, сортируя их отправителем/получателями.
  • Автоматически извлекать сообщения из почтовых ящиков пользователей (не хотите хранить их пароли)
  • Вероятно, используйте почтовый фильтр на почтовом сервере для пересылки сообщений с/на указанный адрес (не знаете, как это сделать)

Но может быть, кто-то может дать некоторые советы? Любые идеи, ребята?

    2 2
  • 12 сен 2020 2020-09-12 08:13:10
  • baldr

2 ответа

Я сделал что-то подобное пару лет назад (с Postfix, однако, не с MS Exchange).

Лучший подход IMO — настроить почтовый сервер для слепого копирования каждого письма на ваш скрипт. В Postfix это называется «пользовательский транспорт». Таким образом, ваши клиенты смогут отправлять электронную почту с помощью любой программы, не обязательно с помощью веб-формы. AFAIK, почти все решения для архивирования электронной почты работают именно так.

  • 12 сен 2020 2020-09-12 08:13:12
  • Alex Morozov

Похоже, вы ищете что-то вроде функции ведения журнала на сервере обмена Microsoft Exchange. Он позволяет определить специальный почтовый ящик, который получит копию всех писем. Вы можете найти более подробную информацию об этом здесь, здесь и здесь.

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

Добавить комментарий