Серверная часть электронной почты Django (продолжает отправлять электронную почту от неправильного «отправителя»)

#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, верно?