2013-01-03 20 views
15

Bir metin dosyasına bir mesaj yazan ve bir e-posta olarak gönderen bir komut dosyası yazdım. Her şey iyi gidiyor, eposta hariç hepsi bir satırda görünüyor.Python'un smtplib'i kullanılarak e-postada satır sonları nasıl alınır?

\n numaralı satır sonları ekledim ve metin dosyası için çalışıyor ancak e-posta için çalışmıyor. Olası sebep ne olabilir biliyor musunuz?


İşte benim kod: hepimiz için maalesef

import smtplib, sys 
import traceback 
def send_error(sender, recipient, headers, body): 

    SMTP_SERVER = 'smtp.gmail.com' 
    SMTP_PORT = 587 
    session = smtplib.SMTP('smtp.gmail.com', 587) 
    session.ehlo() 
    session.starttls() 
    session.ehlo 
    session.login(sender, 'my password') 
    send_it = session.sendmail(sender, recipient, headers + "\r\n\r\n" + body) 
    session.quit() 
    return send_it 


SMTP_SERVER = 'smtp.gmail.com' 
SMTP_PORT = 587 
sender = '[email protected]' 
recipient = '[email protected]' 
subject = 'report' 
body = "Dear Student, \n Please send your report\n Thank you for your attention" 
open('student.txt', 'w').write(body) 

headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 
headers = "\r\n".join(headers) 
send_error(sender, recipient, headers, body) 

cevap

12

Maalesef ileti gövdesi HTML içeriğini ("Content-Type: text/html") sahip olduğunu beyan etmiştir var. Satır arası için HTML kodu <br>'dur. İçerik türünüzü text/plain olarak değiştirmelisiniz veya HTML dokümanı oluşturulurken, düz \n yerine satır sonları için HTML işaretlemesini kullanmalısınız. Bir yan not olarak


, ayrıca email package de bakabilirsiniz. Sizin için E-posta mesajlarının tanımını kolaylaştırabilecek bazı sınıflar var ( with examples). (Sonunda \r\n ile) Content-Type: text/plain içerik tipi başlığını ayarlama

import smtplib 
from email.mime.text import MIMEText 

# define content 
recipients = ["[email protected]"] 
sender = "[email protected]" 
subject = "report reminder" 
body = """ 
Dear Student, 
Please send your report 
Thank you for your attention 
""" 

# make up message 
msg = MIMEText(body) 
msg['Subject'] = subject 
msg['From'] = sender 
msg['To'] = ", ".join(recipients) 

# sending 
session = smtplib.SMTP('smtp.gmail.com', 587) 
session.starttls() 
session.login(sender, 'my password') 
send_it = session.sendmail(sender, recipients, msg.as_string()) 
session.quit() 
21

değil, program veya uygulama her tip piton yok aynı standardizasyon kullanır. Sorunuzun baktığımızda

senin başlık budur fark: Yeni hatlar için HTML stili etiketlerini kullanmak gerekir demektir "Content-Type: text/html"

, bu hat sonları denir. <br>

Metin olmalıdır:

"Dear Student, <br> Please send your report<br> Thank you for your attention" 

Bunun yerine, okumak başlığını değiştirmeniz gerekir karakter tipi yeni çizgileri kullanmak istiyorsanız: Hala New- değiştirmek zorunda kalacak "Content-Type: text/plain"

e-postada kullanılan çift \r\n tek bir \n satır karakter.

Metin olacaktır:

"Dear Student, \r\n Please send your report\r\n Thank you for your attention" 
+0

Çok teşekkür ederim. '\ r \ n' benim için çalışmıyor ama'
' yapar. –

0

beni çok satırlı düz metin e-postalar göndermek için izin:

Örneğin (denenmemiş) deneyebilirsiniz.

0

Outlook, satır beslemelerini ekstra olduğuna inandığı düz metinden kaldırır. https://support.microsoft.com/en-us/kb/287816

Satırların mermi gibi görünmesi için, güncellemeyi aşmayı deneyebilirsiniz. Bu benim için çalıştı.

body = "Dear Student, \n- Please send your report\n- Thank you for your attention" 
+0

Neden aşağı oy? – edW

İlgili konular