我正在设置Splunk通过Amazon SES发送电子邮件。 但是在这之前,我发现了一个Python脚本(Splunk使用Python发送邮件),我想testing哪一个不能在我的Linux服务器上工作。 输出如下所示。 我可以使用Sendmail在命令行上发送testing邮件 – 所以我的Amazon SES证书没有任何问题。 不知何故,Python不能正确parsingAuth信息?
产量
[root@HOSTNAME ~]# python ses.py Message length is 47 send: 'ehlo HOSTNAME\r\n' reply: '250-email-smtp.amazonaws.com\r\n' reply: '250-8BITMIME\r\n' reply: '250-SIZE 10485760\r\n' reply: '250-STARTTLS\r\n' reply: '250-AUTH PLAIN LOGIN\r\n' reply: '250 Ok\r\n' reply: retcode (250); Msg: email-smtp.amazonaws.com 8BITMIME SIZE 10485760 STARTTLS AUTH PLAIN LOGIN Ok send: 'STARTTLS\r\n' reply: '220 Ready to start TLS\r\n' reply: retcode (220); Msg: Ready to start TLS send: 'ehlo HOSTNAME\r\n' reply: '250-email-smtp.amazonaws.com\r\n' reply: '250-8BITMIME\r\n' reply: '250-SIZE 10485760\r\n' reply: '250-STARTTLS\r\n' reply: '250-AUTH PLAIN LOGIN\r\n' reply: '250 Ok\r\n' reply: retcode (250); Msg: email-smtp.amazonaws.com 8BITMIME SIZE 10485760 STARTTLS AUTH PLAIN LOGIN Ok send: 'AUTH PLAIN ASOIJFAIUSHDFIGASDALIUSFDILUAI2FIUWHIVHSLIHDVUISHDLVIUSLIDUVKSUHDLKVSUHD=\r\n' reply: '535 Authentication Credentials Invalid\r\n' reply: retcode (535); Msg: Authentication Credentials Invalid Traceback (most recent call last): File "ses.py", line 31, in <module> server.login(smtp_username, smtp_password) File "/usr/lib64/python2.6/smtplib.py", line 589, in login raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, 'Authentication Credentials Invalid')
这是我用来testing我上线的脚本。
#!/usr/bin/python import smtplib def prompt(prompt): return raw_input(prompt).strip() fromaddr = 'user@somehost' toaddrs = '[email protected]' msg = """From: [email protected] Hello, this is dog. """ print "Message length is " + repr(len(msg)) #Change according to your settings smtp_server = 'email-smtp.us-east-1.amazonaws.com' smtp_username = '[redacted]' smtp_password = '[redacted]' smtp_port = '587' smtp_do_tls = True server = smtplib.SMTP( host = smtp_server, port = smtp_port, timeout = 10 ) server.set_debuglevel(10) server.starttls() server.ehlo() server.login(smtp_username, smtp_password) server.sendmail(fromaddr, toaddrs, msg) print server.quit()
也许不是你正在寻找的答案,但我使用Python boto库来处理AWS相关的东西:
import boto from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText def send_ses(fromaddr, subject, body, recipient, attachment=None, filename=''): """Send an email via the Amazon SES service. Example: send_ses('[email protected], 'greetings', "Hi!", '[email protected]) Return: If 'ErrorResponse' appears in the return message from SES, return the message, otherwise return an empty '' string. """ msg = MIMEMultipart() msg['Subject'] = subject msg['From'] = fromaddr msg['To'] = recipient msg.attach(MIMEText(body)) if attachment: part = MIMEApplication(attachment) part.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(part) conn = boto.connect_ses() result = conn.send_raw_email(msg.as_string()) return result if 'ErrorResponse' in result else ''