2010-11-28 9 views
0

私はPythonのジュニアなので、心に留めておいてください。 Pythonスクリプトでは、送信者のアドレスとは異なるReturn-Pathアドレスを設定する必要があります。 (GmailをSMTPサーバーとして使用しています)リターンパスをPythonで確実に実行する

私はこの質問について多くの検索を行い、たくさんの "回答"を見つけましたが、解決策は見つかりませんでした。私はこのリンクを試しましたSetting Return-Path with Python sendmail for a MIME messageしかしそれは私のために全く働いていません。電子メールの受信者が見る「To:」アドレスを変更することはできますが、「返信」をクリックすると、再度送信元の電子メールアドレスに戻ります。

これは私が作成しようとしている機能です。これは、私が別のReturn-Pathを強制する必要があることを除いて、十分に機能します。

#!/usr/bin/python 
import smtplib 
import os 

from email.MIMEMultipart import MIMEMultipart 
from email.MIMEBase import MIMEBase 
from email.MIMEText import MIMEText 
from email.Utils import COMMASPACE, formatdate 
from email import Encoders 
import sap_mailserverdata as sf 

def send_mail(sent_to, subject, body_text, sent_from_addr='', sent_from_name='', files=[], cc=[], bcc=[]): 
    """Send emails with or without attachments.""" 
    assert type(sent_to)==list  
    assert type(files)==list 
    assert type(cc)==list 
    assert type(bcc)==list 

    message = MIMEMultipart() 
    message['From'] = sent_from_addr 
    message['To'] = COMMASPACE.join(sent_to) 
    message['Date'] = formatdate(localtime=True) 
    message['Subject'] = subject 
    message['Cc'] = COMMASPACE.join(cc) 
    message.preamble = 'You need a MIME enabled mail reader to see this message.\n' 

    message.attach(MIMEText(body_text, 'html')) 

    for f in files: 
     part = MIMEBase('application', 'octet-stream') 
     part.set_payload(open(f, 'rb').read()) 
     Encoders.encode_base64(part) 
     part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f)) 
     message.attach(part) 

    addresses = [] 
    for x in sent_to: 
     addresses.append(x) 
    for x in cc: 
     addresses.append(x) 
    for x in bcc: 
     addresses.append(x) 

    mail_server = smtplib.SMTP(sf.server, sf.server_port) 
    mail_server.ehlo() 
    mail_server.set_debuglevel(1) 
    mail_server.starttls() 
    mail_server.login(sf.username, sf.password) 
    mail_server.sendmail(sent_from_addr, addresses, message.as_string()) 
    mail_server.quit() 

私は確実に異なる返信先のリターンパスを指定できるようにするには、この関数で何をしないのですか?

答えて

5

返信先と返信先は、2つの異なる獣です。 RFCを参照してください。

あなたはと返信先を設定することができます:リターン・パスはバウンスを受信アドレスにMTAによって設定されている

msg['reply-to'] = '[email protected]' 

。それはサーバー管理者によって制御されるので、Googleで働かない限り、これはあなたの管理下にあるとは思わない。

ほとんどの場合、「返信先」の後に1つあります。あなたが本当にリターンパスを変更する必要がある場合は、使用している特定のMTAに対してこれを行う方法については、あなたのコントロールとgoogleの下にSMTPサーバを使用する必要があります。多くは、返品を無効にできるユーザやホストのホワイトリストパス。

+0

大変です。それは笛のようにちょうど滑らかに働く。私は電子メールで読む必要があるようです。 – Thinkwell

関連する問題