0

以下のコードを使用しています。

import smtplib
import zipfile
import tempfile
from email import encoders
from email.message import Message
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart

#...

def send_file_zipped(the_file, recipients, sender='email@email.com'):
    myzip = open('file.zip', 'rb')


    # Create the message
    themsg = MIMEMultipart()
    themsg['Subject'] = 'File %s' % the_file
    themsg['To'] = ', '.join(recipients)
    themsg['From'] = sender
    themsg.preamble = 'I am not using a MIME-aware mail reader.\n'
    msg = MIMEBase('application', 'zip')
    msg.set_payload(myzip.read())
    encoders.encode_base64(msg)
    msg.add_header('Content-Disposition', 'attachment', filename=the_file + '.zip')
    themsg.attach(msg)
    themsg = themsg.as_string()

    # send the message
    smtp = smtplib.SMTP("smtp.gmail.com", "587")
    smtp.connect()
    smtp.sendmail(sender, recipients, themsg)
    smtp.close()

#running this
send_file_zipped('file.zip', 'email@email.edu')

ここで正常に接続できるようにさまざまなバリエーションを試しましたが、ここでは途方に暮れています。私が得ているエラーはこれです:

Traceback (most recent call last):
File "/Users/Zeroe/Documents/python_hw/cgi-bin/zip_it.py", line 99, in <module>
send_file_zipped('file.zip', 'email@email.com')
File "/Users/Zeroe/Documents/python_hw/cgi-bin/zip_it.py", line 40, in send_file_zipped
smtp.connect()
File "/usr/local/lib/python3.2/smtplib.py", line 319, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/local/lib/python3.2/smtplib.py", line 294, in _get_socket
return socket.create_connection((host, port), timeout)
File "/usr/local/lib/python3.2/socket.py", line 404, in create_connection
raise err
File "/usr/local/lib/python3.2/socket.py", line 395, in create_connection
sock.connect(sa)
socket.error: [Errno 61] Connection refused

私の問題はsmtpサーバーとの接続にあると思いますが、何が欠けているのかわかりません。どんな助けでも大歓迎です!!

4

2 に答える 2

1

smtp.connect()間違っています/冗長です。初期化時のsmtplib.SMTP(...)呼び出し.connect。パラメータのない単純な.connect呼び出しは接続を意味localhostし、マシンで実行されている SMTP サーバーがない場合はエラーが発生します。

ただし、目標は GMail 経由でメールを送信することです。GMail の SMTPには authentication が必要であることに注意してください。これは行っていません。

それに応じて、最後の行は次のようになります。

# send the message
smtp = smtplib.SMTP("smtp.gmail.com",  587)
smtp.helo()
smtp.starttls()                 # Encrypted connection
smtp.ehlo()
smtp.login(username, password)  # Give your credentials
smtp.sendmail(sender, recipients, themsg)
smtp.quit()
于 2012-05-07T03:17:54.663 に答える
0

これは問題ではないかもしれませんが、ポート番号を文字列として指定しているため、おそらくうまくいきません。

于 2012-05-07T02:41:19.957 に答える