без новой строки и двойной новой строки при использовании нуля против одной новой строки в строке, отправленной на электронную почту - PullRequest
0 голосов
/ 08 ноября 2011

Я отправляю строку в электронное письмо, и мне нужно одно предложение в каждой строке, например:

"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"

И если я не включаю символ новой строки, я получаю это:

"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..process):

msgemail +="\nLoaded"+fcl

Хотя это не приводит к красиво отформатированному письму:

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

Ответы [ 3 ]

0 голосов
/ 08 ноября 2011

Я столкнулся с той же проблемой, используя 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 вернет его со списком кортежей сбоев, если некоторые электронные письма не будут отправлены. Если все электронные письма не отправляются, возникает исключение, и если все они успешны, то словарь пуст.

Вы спасете себя от горя, если проверите его.

0 голосов
/ 06 января 2012

Может случиться так, что '\ 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()
0 голосов
/ 08 ноября 2011

Похоже, что проблема с кодом отсутствует, между каждой строкой 'Loaded ...' должна быть только одна новая строка.

Возможно, почтовый клиент, который вы используете дляпросмотрите электронную почту, интерпретируя новые строки как новые абзацы и вставляя этот интервал автоматически.Попробуйте заменить \n на <br> и посмотрите, приведет ли это к единственному интервалу, который вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...