
Amazon SES를 통해 이메일을 보내도록 Splunk를 설정하고 있습니다. 하지만 이 작업을 수행하기 전에 테스트하고 싶은 Python 스크립트(Splunk는 Python을 사용하여 메일 보내기)가 내 Linux 서버에서 작동하지 않는 것을 발견했습니다. 출력은 아래와 같습니다. Sendmail을 사용하여 명령줄에서 테스트 이메일을 보낼 수 있으므로 Amazon SES 자격 증명에는 아무런 문제가 없습니다. 어떻게 든 Python이 인증 정보를 올바르게 구문 분석하지 않습니까?
산출
[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')
이것은 내가 온라인에서 얻은 것을 테스트하는 데 사용하는 스크립트입니다.
#!/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()
답변1
아마도 당신이 찾고 있는 대답이 아닐 수도 있지만 저는 Python을 사용하고 있습니다.보토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 ''