0

メールに文字列を送信していますが、次のように 1 行に 1 文が必要です。

"Loaded LLARY_AR with 0 features
Loaded LLARY_LN with 44 features
Loaded LLARY_PT with 23 features"

しかし、文字列連結に 1 つの改行を追加すると、次のように 1 つではなく 2 つの改行が得られます。

"Loaded LLARY_AR with 0 features

Loaded LLARY_LN with 44 features

Loaded LLARY_PT with 23 features"

改行を含めないと、次のようになります。

"Loaded LLARY_AR with 0 features Loaded LLARY_LN with 44 features Loaded LLARY_PT with 23 features"

コードは次のとおりです。

msgemail = ""
for fcl in trnlist:
    try:
        tofc = param["tsde"]+"\\"+param["trema"]+fcl
        fromfc = param["msde"]+"\\"+param["mchema"]+fcl
        arcpy.DeleteFeatures_management(tofc)
        arcpy.Append_management(fromfc, tofc)
        msgemail +="\nLoaded "+fcl+" with "+str(arcpy.GetCount_management(fromfc))+" features"
        del fcl, tofc, fromfc
    except:
        msgemail +="\nUnsuccessful!! "+fcl

emailto = ["email@to","email@to"]
server = smtplib.SMTP('server.here')
header = "Results:\n"
subject = "Data"
mailmessage = header+msgemail+"\n\nCheck log for details"
message = 'Subject: %s\n\n%s' %(subject, mailmessage)
for e in emailto:
    try:
        server.sendmail("email@from",e, message)
    except:
        arcpy.AddMessage(e+" was not sent an email.")
server.quit()

改行がこのように機能する理由がわかりません..そして初心者..明らかにここに何かが欠けています。

これにより、適切にフォーマットされた電子メールが生成されることがわかりました (ただし、..GetCount..プロセスからの必要な情報は含まれていません)。

msgemail +="\nLoaded"+fcl

これらは適切にフォーマットされた電子メールにはなりませんが、

msgemail +="\nLoaded "+fcl+" with "+str(arcpy.GetCount_management(fromfc))+" features"
msgemail +="\nLoaded "+fromcnt
msgemail +="\nLoaded "+fromcnt+" testing for string at end"
4

3 に答える 3

0

'\n' は行末に来る必要があるかもしれません。

ばかげてうまくいかないかもしれませんが、試してみる価値はあります。

msgemail = "\n"
for fcl in trnlist:
    try:
        tofc = param["tsde"]+"\\"+param["trema"]+fcl
        fromfc = param["msde"]+"\\"+param["mchema"]+fcl
        arcpy.DeleteFeatures_management(tofc)
        arcpy.Append_management(fromfc, tofc)
        msgemail +="Loaded "+fcl+" with "+str(arcpy.GetCount_management(fromfc))+" features\n"
        del fcl, tofc, fromfc
    except:
        msgemail +="\nUnsuccessful!! "+fcl

emailto = ["email@to","email@to"]
server = smtplib.SMTP('server.here')
header = "Results:\n"
subject = "Data"
mailmessage = header+msgemail+"\n\nCheck log for details"
message = 'Subject: %s\n\n%s' %(subject, mailmessage)
for e in emailto:
    try:
        server.sendmail("email@from",e, message)
    except:
        arcpy.AddMessage(e+" was not sent an email.")
server.quit()
于 2012-01-06T16:01:50.683 に答える
0

smtplib を単独で使用して同じ問題に遭遇しました。それを行うためのより良い方法はこれであることがわかりました:

from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import smtplib

def send_mail(send_from, send_to, subject, text, files=[], server='mail.server.com'):
    assert type(send_to)==list
    assert type(files)==list
    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject
    msg.attach( MIMEText(text) )
    for f in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(f,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
        msg.attach(part)
    smtp = smtplib.SMTP(server)
    mydict = smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.close()
    return mydict

辞書の復帰に注意してください。一部のメールの送信に失敗した場合、smtp.sendmail は失敗したタプルのリストと共にそれを返します。すべての電子メールの送信に失敗した場合は例外がスローされ、すべての送信が成功した場合は辞書が空になります。

チェックしておけば、悲しみから解放されます。

于 2011-11-08T18:09:58.443 に答える
0

コードに問題はないようです。「Loaded...」の各行の間には改行が 1 つだけあるはずです。

電子メールを表示するために使用している電子メール クライアントが、改行を新しい段落として解釈し、その間隔を自動的に挿入している可能性があります。を に置き換えてみて、期待どおりの 1 つの間隔になるかどうかを確認してください\n<br>

于 2011-11-08T17:30:47.337 に答える