Python 3.1.2 Kullanarak ikili ek dosyaları gönderme konusunda sorun yaşıyorum (jpeg, pdf, vb) - MIMEText ekleri düzgün çalışıyor. aşağıdaki gibi, söz konusu kod yolu aşağı çağıran yığınında, İkili dosya e-posta eki sorunu
for file in self.attachments:
part = MIMEBase('application', "octet-stream")
part.set_payload(open(file,"rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
msg.attach(part) # msg is an instance of MIMEMultipart()
server = smtplib.SMTP(host, port)
server.login(username, password)
server.sendmail(from_addr, all_recipients, msg.as_string())
Ancak ... olduğu bir yük oluşturur eki almıştır) (msg.as_string sanki, görünüşe (aşağıdaki Traceback bakınız) string yerine 'bayt' tipi.
Soruna neden olabilecek herhangi bir fikri olan var mı? Herhangi bir yardım takdir edilecektir.
Alan
builtins.TypeError: string payload expected: <class 'bytes'>
File "c:\Dev\CommonPY\Scripts\email_send.py", line 147, in send
server.sendmail(self.from_addr, all_recipients, msg.as_string())
File "c:\Program Files\Python31\Lib\email\message.py", line 136, in as_string
g.flatten(self, unixfrom=unixfrom)
File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
self._write(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
self._dispatch(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
meth(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 181, in _handle_multipart
g.flatten(part, unixfrom=False)
File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
self._write(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
self._dispatch(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
meth(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 155, in _handle_text
raise TypeError('string payload expected: %s' % type(payload))
dan çözeltisi (kuyu, olası bir geçici çözüm, Yardım edip edemeyeceğine dair bir fikrim yok. MIMEBase'in yerine “MIMEApplication” kullanmayı deneyebilirsiniz –
Merhaba David Cevabınız için teşekkürler. MIMEApplication çalıştı, ancak hiçbir boşuna (yani. Msg.get_payload() hala dize yerine bytes döndürür). İkili dosyayı bir dizeye doğru şekilde dönüştürmemekle kodlamanın yapılmasıyla ilgili bir şey olduğunu sanıyorum, ama yanılıyor olabilirim. Aynı zamanda çeşitli web sitelerinden çok benzer örnekleri denediğim konusunda endişeliyim - hepsi benim için başarısız oluyor, ancak yazar için çalışmış olmalı. Saygılarımızla –