【发布时间】:2015-07-24 09:41:42
【问题描述】:
我有课,打算从 Git 提交中获取用户名和他的电子邮件:
class BitbucketData(object):
def get_user_name(self):
proc = subprocess.Popen("git --no-pager show -s --format='%an'", stdout=subprocess.PIPE)
committer_name = proc.stdout.read()
if committer_name:
return committer_name
def get_user_email(self):
proc = subprocess.Popen("git --no-pager show -s --format='%aE'", stdout=subprocess.PIPE)
committer_email = proc.stdout.read()
if committer_email:
return committer_email
然后它用于向用户发送通知(底部是工作版本 - 没有变量 - 所有 sender 和 receiver 数据集明确,而不是变量 - 他们在这里评论):
class Services(object):
def sendmail(self, event):
repo = BitbucketData()
#to_address = repo.get_user_email()
#to_address = 'user@domain.com'
#to_name = repo.get_user_name()
#to_name = 'Test user'
subject = 'Bamboo build and deploy ready'
sender = 'Bamboo agent <user@domain.com>'
text_subtype = 'plain'
message = """
Hello, {}.
Your build ready.
Link to scenario: URL
Link to build and deploy results: {})
""".format('Test user', os.environ['bamboo_resultsUrl'])
msg = MIMEText(message, text_subtype)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = 'Test user <user@domain.com>'
smtpconnect = smtplib.SMTP('outlook.office365.com', 587)
smtpconnect.set_debuglevel(1)
smtpconnect.starttls()
smtpconnect.login('user@domain.com', 'password')
smtpconnect.sendmail('user@domain.com', 'user@domain.com', msg.as_string())
smtpconnect.quit()
print('Mail sent')
print(repo.get_user_email())
问题是 - 如果我使用来自变量的数据(例如 to_address = 'user@domain.com' 或使用带有 to_address = repo.get_user_email() 的 BitbucketData() 类 - 我从 Office365 服务器收到错误:
... reply: '250 2.1.0 Sender OK\r\n' reply: retcode (250); Msg: 2.1.0 Sender OK send: "rcpt TO:<'user@domain.com'>\r\n" reply: '501 5.1.3 Invalid address\r\n' reply: retcode (501); Msg: 5.1.3 Invalid address ... File "C:\Python27\lib\smtplib.py", line 742, in sendmail raise SMTPRecipientsRefused(senderrs) smtplib.SMTPRecipientsRefused: {"'user@domain.com'\n": (501, '5.1.3 Invalid address')}
当使用变量时,代码如下所示:
class Services(object):
def sendmail(self, event):
repo = BitbucketData()
to_address = repo.get_user_email()
#to_address = 'user@domain.com'
to_name = repo.get_user_name()
#to_name = 'Test user'
from_address = 'user@domain.com'
subject = 'Bamboo build and deploy ready'
sender = 'Bamboo agent <user@domain.com>'
text_subtype = 'plain'
message = """
Hello, {}.
Your build ready.
Link to scenario: URL
Link to build and deploy results: {})
""".format(to_name, os.environ['bamboo_resultsUrl'])
msg = MIMEText(message, text_subtype)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = to_name
smtpconnect = smtplib.SMTP('outlook.office365.com', 587)
smtpconnect.set_debuglevel(1)
smtpconnect.starttls()
smtpconnect.login('user@domain.com', 'password')
smtpconnect.sendmail(from_address, to_address, msg.as_string())
smtpconnect.quit()
print('Mail sent')
print(repo.get_user_email())
我(或 Microsoft SMTP...)在这里做错了什么?
更新
def sendmail(self, event):
repo = BitbucketData()
print(repr(repo.get_user_email()))
...
给我:
... Creating new AutoEnv config "'user@domain.com'\n" send: 'ehlo pc-user.kyiv.domain.net\r\n' ...
【问题讨论】:
-
能否打印并更新问题中的
print(repr(repo.get_user_email()))? -
您是否注意到错误代码中的
"'user@domain.com'\n"是一个双重包装的字符串?该值实际上包含引号和换行符,因此它可能不是有效地址(除非错误代码添加了额外字符)。 -
@SuperBiasedMan 是的,我看到了——但无法理解“”出现的位置:-|
-
@AnandSKumar 谢谢,问题已更新。是的 - 又是
" "。 -
您是否尝试在将其作为参数传递时删除引号并剥离换行符?就像这个
theEmail.replace('"','').strip(),你可以看看它是否有效。它不会解决问题的根源,但它会让你知道这是否是确切的问题。
标签: python python-2.7 variables office365 smp