转换字符串参数以发送电子邮件可以帮助我(python)

转换字符串参数以发送电子邮件可以帮助我(python),python,string,email,arguments,Python,String,Email,Arguments,我有一个错误:TypeError:在msg2中设置字符串格式期间,并非所有参数都被转换 import smtplib import sys if(len(sys.argv) > 1): smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465) smtp.login('gmail.com', 'password') de = '@gmail.com' para = ['@gmail.com'] msg2=str(sys.argv[1]) msg

我有一个错误:TypeError:在msg2中设置字符串格式期间,并非所有参数都被转换

import smtplib
import sys
if(len(sys.argv) > 1):
 smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)
 smtp.login('gmail.com', 'password')
 de = '@gmail.com'
 para = ['@gmail.com']
 msg2=str(sys.argv[1])
 msg = """From: %s
To: %s
Subject: SMATIJ
server"""+msg2+"""""" % (de, ', '.join(para))

我认为问题在于Python试图将字符串分组为-

 smtp.sendmail(de, para, msg)
 smtp.close()
 print "sending message"
因此,它试图将字符串应用于末尾的空字符串(甚至不确定为什么需要空字符串),这导致了问题。您应该手动将字符串连接分组在一起。范例-

msg = """From: %s
To: %s
Subject: SMATIJ
server"""+msg2+("""""" % (de, ', '.join(para)))
msg = ("""From: %s
To: %s
Subject: SMATIJ
server"""+msg2) % (de, ', '.join(para))
或者更好地使用更强大的
str.format
,例如-

msg = """From: %s
To: %s
Subject: SMATIJ
server"""+msg2+("""""" % (de, ', '.join(para)))
msg = ("""From: %s
To: %s
Subject: SMATIJ
server"""+msg2) % (de, ', '.join(para))

这是实际断裂的部分

msg = """From: {0}
To: {1}
Subject: SMATIJ
server{2}""".format(de, ', '.join(para), msg2)
如果我们将其分解,您要python做的是:

msg = """From: %s
To: %s
Subject: SMATIJ
server"""+msg2+"""""" % (de, ', '.join(para))
你真正想要的可能是这样的:

"""first string %s %s """ +\    # a string of text with 2 placeholders
 msg2 +\                        # a string
 """""" % (de, ', '.join(para)) # empty string of text with no placeholders
                                # (formatted with 2 variables)

可能有助于了解您试图作为输入传递的参数。问题是脚本的最后一行。。。格式被破坏了。看看这里的一些提示->非常感谢,这解决了我的问题。我在“%(元组)”前面构造了一个带有占位符的字符串,得到了这个错误,这让我完全困惑。如果我只是将构造的字符串保存到一个变量中,并在“%(tuple)”之前使用它,那么一切都可以在不使用wince的情况下工作。