>

여러 줄 문자열로 된 Python 스크립트를 사용하여 HTML 전자 메일을 전달하고 있습니다. 외부에서 주어진 4 개의 변수 (작동하는)를 읽어야합니다. 그러나 % 20과 % 40을 사용하는 mail : to 링크가 있습니다. 다른 개체를 참조하기 위해 % s를 사용하고 있습니다. 스크립트를 실행하려고하면 다음 오류가 발생합니다.

TypeError: %o format: a number is required, not str

% 20과 % 40도 변수에 대한 참조가 될 것으로 예상하므로 이해합니다. mail : to link를 포함하고 싶지만 파이썬이 값을 무시하도록 할 수는 없습니다.

#!/usr/bin/env python
list1=[0,1,2,3,4];
import mimetypes, os, smtplib, sys, 
from email import encoders
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
from email.utils import make_msgid

me = "xx@yy.nl"
you = "yy@xx.nl"
DESTINATION=sys.argv[1]
SUBJECT=sys.argv[2]
MESSAGE=sys.argv[3]
PASS='password'
SRVSMTP='mysmtpserv:587'
msg = MIMEMultipart('alternative')
msg['Subject'] = SUBJECT
msg['From'] = me
msg['To'] = you
msg['Date'] = formatdate()
msg['Message-ID'] = make_msgid()
sys.argv[3].split(";")
hostnam, trgname, trgstat, trgseve = sys.argv[3].split(";")
print sys.argv[3].split(";")
text = """ plaintext email here
"""
html = """
<html>
<head>
        <title></title>
</head>
<body>
<p style="margin-left: 80px;"><strong>Trigger:</strong> %s trgname <br />
<strong>Status</strong>: %s  trgstat <br />
<strong>Severity:</strong> %s  trgseve </p>
<p style="margin-left: 40px;"><a href="mailto:xx%40yy.nl?bcc=yy%40xx.com&amp;body=insert%20text%2C%0A%0Ahere%20for%20the%20emailA%5BFirmname%5D%0A%5B%28Address%29%20Adressline2%5D">Click here</a> &nbsp;<strong> %s hostnam.</strong><br />
&nbsp;</p>
<a href="mailto:xxxyyy@yxy.com?subject=Unsubscribe%20me">Click here to unsubscribe</a>&nbsp;</span><br />
&nbsp;</p>
</body>
</html>
""" % ('hostnam', 'trgname', 'trgstat', 'trgseve', 'hostnam')
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
smtpserver = smtplib.SMTP(SRVSMTP)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login(me, PASS)
smtpserver.sendmail(me, you, msg.as_string())
smtpserver.quit()

  • 답변 # 1

    format 를 사용할 수 있습니다   % 대신 전화  현재 사용 중입니다.

    예제에서 모든 %s 를 교체하십시오  작성자 {}  그런 다음 % ('hostnam', 'trgname', 'trgstat', 'trgseve', 'hostnam') 를 교체하십시오.  작성자 .format(hostnam, trgname, trgstat, trgseve, hostnam)

  • 답변 # 2

    템플릿 문자열은 어떻습니까?

    from string import Template
    print(Template("here be %20 %40 my ${placeholder}string").safe_substitute(placeholder="amazing"))
    # here be %20 %40 my amazing string
    
    

    Python 2.4부터 사용 가능

  • 답변 # 3

    원치 않는 % 를 피할 수 있습니다  문자를 두 배로 늘림 :

    <p style="margin-left: 40px;"><a href="mailto:xx%%40yy.nl?bcc=yy%%40xx.com&amp;body=insert%%20text%%2C%%0A%%0Ahere%%20for%%20the%%20emailA%%5BFirmname%%5D%%0A%%5B%%28Address%%29%%20Adressline2%%5D">Click here</a> &nbsp;<strong> %s hostnam.</strong><br />
    
    

    지루하고 다른 답변이 더 나을 것이다. 나는 이것을 완전성에 대해 언급하고 있습니다.

관련 자료

  • 이전 r - group_by ()와 함께 cut () 사용
  • 다음 c++11 - 이동 시맨틱 적용