Как переопределить адрес отправителя в электронной почте Django (отправлено через Gmail) - PullRequest
7 голосов
/ 07 декабря 2011

В моем файле settings.py у меня есть следующие значения:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'pass'
EMAIL_USE_TLS = True

Затем в моих представлениях я получаю адрес электронной почты от своих моделей, например:

#models.py
class Profile(models.Model):
    name = models.CharField(...)
    email_address = models.EmailField()

Давайте предположим, что email_address в модели Profile составляет sample@gmail.com

#views
def send_email(request,profile_id):
   profile = Profile.objects.get(pk=profile_id)
   email = profile.email_address

, поэтому, когда я отправлю письмо,

send_mail('subject', 'content', email, ['example1@example.com'])

Когда письмо уже было отправлено,Sender_email по-прежнему user@gmail.com.Может ли кто-нибудь научить меня перезаписывать этот адрес электронной почты?Спасибо.

Ответы [ 2 ]

9 голосов
/ 07 декабря 2011

Значение DEFAULT_FROM_EMAIL - это просто значение по умолчанию. Django использует это в тех местах, где электронная почта отправляется автоматически (например, отчеты об ошибках на ADMINS). Когда вы вызываете метод send_mail напрямую, вы должны указать параметр from_email. Даже если вы хотели DEFAULT_FROM_EMAIL, вам придется импортировать его из django.conf.settings и затем передать его.

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

Обычно, когда ваша почта проходит через серверы исходящей почты Gmail, она игнорирует отправленные вами пользовательские заголовки и отправляет их от вашего действительного пользователя учетной записи Gmail. Возможно, вам удастся обойти это, добавив пользовательский адрес электронной почты, который вы хотите использовать в качестве действительного отправителя, в настройках Gmail. Перейдите в настройки, а затем на вкладку «Аккаунты и импорт». Найдите раздел, озаглавленный «Отправить письмо как», и нажмите ссылку «Добавить другой адрес вашей электронной почты». Вы можете добавить новую учетную запись электронной почты, которую хотите отправить оттуда, и она заставит вас подтвердить адрес по электронной почте (поэтому это должен быть действительный адрес, который может получать электронную почту).

0 голосов
/ 07 декабря 2011

Дэвид, вы уверены, что ваша электронная почта встречается в вашем примере?

Из документации: https://docs.djangoproject.com/en/dev/topics/email/ from_email: адрес отправителя. Обе формы fred@example.com и Fred являются законными. Если опущен, используется настройка DEFAULT_FROM_EMAIL.

Кроме того: https://docs.djangoproject.com/en/dev/topics/email/#django.core.mail.send_mail Ваше использование выглядит правильно:

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

Переезд не может быть проблемой. Ваше электронное письмо может быть пустым?

Надеюсь, это поможет.

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