
Estoy configurando Splunk para enviar correos electrónicos a través de Amazon SES. Pero antes de hacer esto, encontré un script de Python (Splunk usa Python para enviar los correos electrónicos) que quería probar y que no funciona en mi servidor Linux. El resultado se muestra a continuación. Puedo enviar correos electrónicos de prueba en la línea de comando usando Sendmail, por lo que no hay ningún problema con mis credenciales de Amazon SES. ¿De alguna manera Python no analiza la información de autenticación correctamente?
Producción
[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')
Este es el script que estoy usando para probar y que obtuve en línea.
#!/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()
Respuesta1
Quizás no sea la respuesta que estás buscando, pero estoy usando Python.botobiblioteca para manejar cosas relacionadas con 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 ''