2

メールの最後の 10 ~ 20 文字が切り捨てられるという奇妙な問題が発生しています。

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

#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 を使用しています。Outlook は、平文メールのどこに改行を入れるかを私よりもよく知っていると考えています...

どんな洞察も高く評価されます。

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

<br/>

それが違いを生むかどうかはわかりません。ブレーキ タグを除けば、HTML タグに少しでも似ているものは何もないため、問題は予期しないタグが書式設定を台無しにすることではありません。

4

2 に答える 2

3

電子メール メッセージからすべての改行を削除すると、問題が発生します。通常、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した場合、理論的には任意の長さの行を渡すことができますが、許可されているものに固執し、適切な like or7bitを使用する方が安全で安全です (本当にワイルドになりたい場合) 。Content-Transfer-Encodingquoted-printablebase64

于 2012-04-02T16:39:45.733 に答える