2017-05-09 6 views
0

は、私は、Pythonで電子メールを介して添付ファイルを送信しようとしているが、私はこのエラーを取得しています:Python:電子メールで添付ファイルを送信しようとしました〜文字列エラー?

msg.attach(msgImageを) はAttributeError: 'str' はオブジェクトが 'アタッチ' は属性を持っていない

ここ

はコードです:

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.MIMEText import MIMEText 
from email.mime.image import MIMEImage 


def send_email(): 
    fromaddr = '[email protected]' 
    toaddrs = 'Toemail' 
    global msg 
    subject = 'RESPOSTA' 
    message = 'Subject: %s\n\n%s' % (subject, msg) 

    username = '[email protected]' 
    password = 'xxxxxxxx' 

    server = smtplib.SMTP('smtp.gmail.com:587') 
    server.starttls() 
    server.login(username,password) 

    fp = open ('C:\Python27\Scripts\pares.txt', 'rb') 
    msgImage = MIMEImage (fp.read(), _subtype='txt') 
    fp.close() 
    msg.attach(msgImage) 

    server.sendmail(fromaddr, toaddrs, message, msg.as_string()) 
    server.quit() 

msg = 'Email test, please, see the attachments' 
send_email() 

誰もが問題であるかのヒントを持っていますか?

+0

ヒント: 'msg'の種類は何ですか? – jwodder

+0

'msg'は文字列ですが、スクリプトがtxtファイルを読み込んだときに問題を理解できません。文字列としてコンテンツを「添付」することはできませんか? – Milteven

答えて

1

コードが奇妙で間違っています。言語、SMTPプロトコル、電子メールモジュールの基本的な知識なしに高度な概念を使用し始めます。

msgあなたのコードの変数はstrタイプです。 strはプレーンな文字列で、文字のリストです。メソッド.attachはありません。

文字列の代わりにクラスemail.messageのインスタンスを使用したかったと思います。また、グローバル変数を使用する必要はありません。グローバル変数は悪いので、あなたのケースではグローバル変数を使用する必要は全くありません。

+0

ありがとうございました。将来、別の関数で使用される可能性があるため、グローバル変数を使用しています。 – Milteven

+1

後で他の関数で使用される関数を記述したい場合、グローバル変数はパラメータを渡す可能な最悪の*方法です。グローバル変数ではなく、通常の関数パラメータを使用する必要があります。例: 'def send_mail(msg):' –

関連する問題