2014-09-30 6 views
0

이메일을 보내고 대부분의 헤더를 문제없이 설정할 수 있습니다.Django EmailMessage 클래스를 사용하여 전자 메일의 "From"헤더를 설정하는 적절한 방법은 무엇입니까?

그러나 이것은 꽤 오랫동안 이상한 결과를 낳았습니다.

email = EmailMessage(
    'My foobar subject!!', 
    render_to_string(
     'emails/new_foobar_email.txt', 
     { 
      'foo': foo.something, 
      'bar': bar.something, 
     } 
    ), 
    '[email protected]', 
    [the_user.email, ], 
    headers={'From ': 'Darth Vader <[email protected]>'}, 
) 
email.send(
    fail_silently=False 
) 

이메일이 도착하면, 그것은 "[email protected]을"이 아니라 "다스 베이더"에서 말한다 : 나는에서 현재 해요 곳

이입니다. 나는이 같은 헤더를 설정하려고했습니다

:이 문서에 대한 Internet Message Formats (RFC 2822)을 파고 봤는데, 가장 좋은 방법을 다음과 같은 경우는 나에게 분명하지 않다

# this way worked but was inconsistent. Some email clients showed it was from "unknown sender". 
headers={'From ': 'Darth Vader'}, 

.

나는 또한 SO Question을 보았지만 send_mail() 함수에 적용됩니다. 비슷할 수도 있지만 입니다.

저는 이메일 클라이언트가 올바르게 표시되는 것에 관심이 없습니다. (내가 여러 가지 방법으로 시도해 왔기 때문에 내가 잘못하고있는 방법 중 하나를 캐싱했기 때문에 오염되었을 수 있습니다.)하지만 걱정됩니다 다음과 같은 모범 사례가 있으므로 대부분의 이메일 클라이언트에서 작동합니다.

질문

EmailMessage 클래스를 사용하여 이메일에서 "보낸 사람"헤더를 설정하는 적절한 방법은 무엇입니까? 이메일 클라이언트와 가장 호환되는 방법은 무엇입니까?

+1

왜 헤더 이름 ('보낸 사람')에 후행 공백을 추가합니까? – jjmontes

답변

1

당신은 from 인수에 직접 정보를 넣을 수 있습니다 : 내가 잘못했다

email = EmailMessage(
    'My foobar subject!!', 
    body, 
    'Darth Vader <[email protected]>', 
    [the_user.email]) 
+0

원본 솔루션에 후행 공백이 있음을 발견했습니다. 그러나 이러한 특정 전자 메일에 다른 헤더를 설정하지 않아서 솔루션이 특히 깨끗해집니다. 그래서 나는 너의 대답으로 갈거야. 감사! – teewuane

0
email = EmailMessage(
    'My foobar subject!!', 
    render_to_string(
     'emails/new_foobar_email.txt', 
     { 
      'foo': foo.something, 
      'bar': bar.something, 
     } 
    ), 
    '[email protected]', 
    [the_user.email, ], 
    headers={'From': 'Darth Vader <[email protected]>'}, 
) 
email.send(
    fail_silently=False 
) 

중요한 것은 "보낸 사람"다음에 후행 공백을 가졌다. 이렇게하면 효과가 있습니다.

그러나. 코드를 단순화하고 @Daniel Roseman이 제안한대로 표시 이름을 from 인수에 넣고 헤더 키워드를 사용하지 않도록 할 것입니다.