2016-05-18 2 views
2

Я настроил smtp с помощью gmail. Когда я использую send_mail, по электронной почте не появляется в учетной записи, получающей электронное письмо.'from_email' не отображается с 'send_mail' smtp

Джанго settings.py

# DEFAULT_FROM_EMAIL = '[email protected]' 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = '**********' 
EMAIL_USE_TLS = True 

Использование

$ python manage.py shell 

Я посылаю почту следующим образом,

>>> from django.core.mail import send_mail 
>>> send_mail('subject is', 'message is and is not 12342', '[email protected]', ['[email protected]']) 
1 
>>> 

Я получаю это сообщение в моем аккаунте GMAIL (который та же учетная запись gmail, используемая для smtp), но из электронной почты отображается как [email protected] и должен быть от Emai [email protected]

ответ

1

Я решил эту проблему, используя эту точку зрения:

def contact(request): 
    form = ContactForm(data=request.POST or None) 

    if form.is_valid(): 
     subject = form.cleaned_data['sujet'] 
     message = form.cleaned_data['message'] 
     sender = form.cleaned_data['envoyeur'] 

     msg_mail = str(message) + " " + str(sender) 

     send_mail(sujet, msg_mail, sender, ['[email protected]'], fail_silently=False) 

    return render(request, 'blog/contact.html', locals()) 

Я фактически добавляемое письмо от отправителя сообщения. Вы даже можете удалить аргумент отправителя из send_mail. Вам просто нужно сделать свой EmailField обязательным, чтобы убедиться, что вы получите адрес электронной почты отправителя.

2

Когда вы отправляете электронные письма через SMTP-серверы Google, вы не можете изменить поле из электронной почты. Он использует тот же адрес, который вы указали для аутентификации.

Если вы хотите его изменить, вам необходимо использовать либо собственный почтовый сервер, либо один из многочисленных доступных apis/серверов почты. Sendgrid, MailGun и т. Д.

+0

Так что эта настройка бесполезна для контактной формы на сайте, так как я никогда не узнаю, от кого почта. Это верно? –

+0

Да, потому что это не одно из предназначенных для использования gsm smtp-серверов. Он предназначен исключительно для того, чтобы люди могли отправлять электронные письма от сторонних почтовых клиентов, таких как телефоны thunderbird и non android. Не предназначено для использования на веб-сайтах. Для этого вам нужно получить сервисы Google Apps. – e4c5

+0

Решение для отображения электронной почты отправителя необходимо добавить. headers = {'Reply-To': contact_email} в опции sendmail. –