#django #email
#django #Адрес электронной почты
Вопрос:
В моем проекте есть несколько случаев, когда я пытаюсь отправить электронное письмо в представлении Django.
Я хочу иметь возможность жестко кодировать отправителя электронной почты в представлении. Однако, когда я пытаюсь это сделать, он продолжает отправлять электронные письма из учетной записи по умолчанию, указанной в моем файле настроек.
Вот пример:
if testform.is_valid():
beta=testform.save()
subject="Hi Beta Tester"
sender="correct@email.com"
recipient=[testform.cleaned_data['email']]
text=loader.get_template('registration/beta_email.txt')
html=loader.get_template('registration/beta_email.html')
site_name='mysite'
d=Context({'site_name':site_name})
text_content=text.render(d)
html_content=html.render(d)
#This sends two mail versions, plain text and html
msg=EmailMultiAlternatives(subject, text_content, sender, recipient)
msg.attach_alternative(html_content, "text/html")
msg.send()
return HttpResponseRedirect('/splash/')
Я думал, что я мог бы отправить здесь явно указать аргумент отправителя. И, тем не менее, когда я его тестирую, электронное письмо отправляется с адреса, указанного в моем файле настроек, настроенного следующим образом:
EMAIL_USE_TLS=True
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='wrong@email.com'
EMAIL_HOST_PASSWORD='private'
DEFAULT_FROM_EMAIL='wrong@email.com'
Нужно ли мне просто удалить константу DEFAULT_FROM_EMAIL, чтобы она заработала? Я пытался это сделать, и, похоже, это работает, но я в замешательстве. В документации Django предполагается, что параметр sender в представлении должен переопределять значение по УМОЛЧАНИЮ.
Комментарии:
1. Похоже, что это должно сработать. Какая версия Django? Взгляните на исходный код для основной версии: code.djangoproject.com/browser/django/trunk/django/core/mail / … . Вы абсолютно уверены, что
sender
это не None, когда вы передаете его вEmailMultiAlternatives
? Я бы поиграл с этим в интерактивной оболочке и с pdb.2. Привет, Брайан, я использую версию v1.2. Я думаю, что моя проблема становится понятной, если вы посмотрите на комментарий ниже
3. Вы уверены, что это не smtp-сервер, переписывающий адрес from? ie: gmail выполняет некоторую защиту от нежелательной почты.
4. Привет, Джон, я новичок в smtp-серверах, поэтому я не знаю, как это отладить. Это чистая среда разработки, поэтому мои электронные письма не были помечены как спам. Не уверен, имеет ли это значение
5. Я знаю, что AddThis (веб-сервис для обмена в социальных сетях) может отправлять электронные письма из любой учетной записи gmail в любую другую учетную запись gmail
Ответ №1:
Я, наконец, разобрался с проблемой здесь. К сожалению, gmail переписывает from и конверт на аутентифицированный smtp.
Если вы хотите обойти это, вам нужно использовать сторонний почтовый сервер (который не ведет себя как такой чопорный), а затем отправлять почту пользователям gmail.
Ответ №2:
Для электронной почты отправителя попробуйте ввести его в < >, и вы сможете добавить имя:
sender = "Formal Name <correct@email.com>"
это именно тот синтаксис, который у меня есть в моем представлении отправки электронной почты, и он работает.
На самом деле не должно быть причины, по которой добавление к нему имени изменило бы способ отправки, но, возможно, стоит попробовать, и, возможно, вам все равно нужно легко читаемое имя.
Комментарии:
1. Я только что протестировал это j и думаю, что это решение. Позвольте мне протестировать это еще немного.
2. Хорошо, здесь происходит кое-что интересное. Все мои электронные письма по умолчанию основаны на константе EMAIL_HOST_USER. реальное значение этой константы — учетная запись Google Apps (в основном, help@mysite.com). Когда я пытаюсь отправить почту с brendan@gmail.com он просто возвращается к значению EMAIL_HOST_USER. ОДНАКО, когда я отправляю что-либо от другого пользователя в учетной записи Google Apps (т. Е. support@mysite.com ), он использует поддержку, а не справку. Забавно, я не знаю, что с этим делать.
3. фактически, это нормально, когда я хочу отправить сообщение своему пользователю из своей учетной записи Google Apps. Но это проблема, когда я хочу, чтобы один пользователь отправлял сообщение другому пользователю через свои соответствующие учетные записи электронной почты
4. @Brendan это интересно… Итак, вы пытаетесь отправлять сообщения от пользователей пользователям? Вы размещаете их учетные записи электронной почты или все они также являются учетными записями gmail?
5. Эй, Джей, я пытаюсь отправлять сообщения от пользователя к пользователю. Все они являются учетными записями gmail. У меня сложилось впечатление, что это было possible…as Я упоминал выше, что AddThis, например, делает это. Любой может подделать поле from, верно?