2012-04-02 4 views
1

電子メールの最後の10〜20文字が切り捨てられているという奇妙な問題が発生しています。次のようにsmtplib.SMTP.sendmailを使用してHTMLメッセージを送信すると電子メールが切り捨てられる

電子メールを送信するコードは次のとおりです。

#Get the runtime arguments. 
subject = args[0] 
content = str(args[1]).replace("\\n","<br/>") #Python automatically escapes the backslash in runtime arguments, so "\n" turns into "\\n". 

#Create the email message. 
msg = MIMEText(content, 'html') 
msg['From']=sender 
msg['To']=",".join(recipients) 
msg['Subject']=subject 

print "Sending email with subject \""+subject+"\" to: " + ",".join(recipients) 

print "Content: \n" + content; 
print "\n\n" 
print "msg.as_string(): \n" + msg.as_string() 

#Set the SMPTP server, and send the email. 
s = smtplib.SMTP(server) 
s.sendmail(sender,recipients,msg.as_string()) 
s.quit() 

あなたがコード内で見ることができるように、私は正しく印刷され、どちらも、画面にコンテンツと、最終的なメッセージの両方を印刷します。しかし、電子メールが受信者によって受信されると、電子メールは切り詰められます。私はそれが特定の量の文字によって切り詰められている場合、または一定量の文字の後に切り捨てられているかどうかは100%確信していませんが、それは後のものと思われます。

奇妙なことに、電子メールは、HTML形式ではなくプレーンテキストで送信されるとうまく送信されます。しかし残念なことに、受信者のほとんどはOutlookを使用しています。これは、私よりも平文メールに新しい行を追加する場所を知っています。

すべての洞察があります。

編集:これは整形式のHTMLではないことにも言及する必要があります。基本的には、新しい行を置き換えるだけです。

<br/> 

私はそれが違いをもたらすかどうかは分かりません。ブレーキタグとは別に、HTMLタグにもリモートで似ているものがないので、予期しないタグがフォーマットを狂わせてしまうという問題はありません。

答えて

2

電子メールメッセージからすべての改行を削除する場合は、問題があります。 SMTPサーバーは通常、約1,000文字を超える行を受け付けません。自由形式のデータを送信したい場合は、Quoted-Printableのようなものにカプセル化します(ここでは、クライアントによって削除される「目に見えない」行区切りを入れることができますが、メッセージ自体を正確にQPエンコードします)。

In quoted printable (RFC 2045), you can hex-encode any =22special=22 chara= 
cter, like this (or=20in=20fact,=20any=20character=20at=all), and add line= 
breaks where you see fit by prefixing them with an equals sign. Of cours= 
e, you also have to encode any literal equals sign, like this: =3D. Bette= 
r use a library which understands the details of this format than write yo= 
ur own encoder, though. 

あなたは理論的には任意の長さのラインに渡すことができますContent-Transfer-Encoding: binaryを指定するが、それは7bitができますどのように固執する方が良いと安全です、そしてあなたが本当に野生に行きたい場合は(quoted-printableかのような、適切なContent-Transfer-Encodingを使用している場合)base64

+0

ありがとうございました。今、私は "\\ n"を "\ n
"に置き換え、正しく動作します。 – Morglor

+0

長い文字列を連結しながら\ n "newline"演算子を追加しました。電子メールの切り捨て問題を解決しました。 –