2012-03-19 40 views
7

Deseo enviar un correo electrónico directamente desde un script a una cuenta de correo electrónico de Gmail, al conectarme directamente al smtp.gmail.com.¿Cómo enviar un correo directamente al servidor SMTP sin autenticación?

Sin embargo, preferiría no tener la contraseña de gmail en el script. Según lo que he leído, parece que Gmail requiere autenticación antes de entregar cualquier correo, incluso a sus propios usuarios.

Mi pregunta es, ¿cómo se entrega el correo procedente de otro servidor SMTP, ya que ese servidor SMTP no tendrá credenciales de Gmail. ¿Gmail solo requiere autenticación para los remitentes "anónimos", y como mi script se ejecuta en una computadora personal, está sujeto a una mayor seguridad? Aquí está el script en Python Me postulo:

import smtplib 
import email 
msg = email.message.Message() 
msg["From"] = "[email protected]" 
msg["To"] = "[email protected]" 
msg["Subject"] = "Test message" 
server = smtplib.SMTP("smtp.gmail.com",587) 
server.starttls() 
server.ehlo_or_helo_if_needed() 
try: 
    failed = server.sendmail("[email protected]","[email protected]", msg.as_string()) 
    server.close() 
except Exception as e: 
    print(e) 

Cuando ejecuto este script, la salida es:

(530, b'5.5.1 Authentication Required. Learn more at 
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected]') 

Mi pregunta es, ¿cómo los servidores SMTP externos evitar este problema? ¿Y lo que hacen es replicable en un script local, o requiere registros DNS inversos correctos, registros SPF, etc.?

Respuesta

5

Puede utilizar algunos servidores SMTP externos sin autenticación (o un servidor SMTP local), pero el mensaje enviado se verán atrapados por el filtro de spam de Google debido a que el msg [ "De"] es @ google.com, mientras el SMTP real no es smtp.gmail.com.

Esos servidores SMTP también deben tener la zona inversa correcta en el DNS de ISP y, de lo contrario, este smtp será bloqueado por google.

0

No puede usar gmail smtp-server sin autenticación. Es una política de google. Debes ingresar la contraseña de tu cuenta. Pero hay otra manera. Puede usar GAE (Google App Engine) con la API de Gmail. De esta forma, puedes enviar mensajes directamente.

17

Esa es una muy buena pregunta, y estoy respondiendo en línea.

Me gustaría enviar un correo electrónico directamente desde un script a una cuenta de correo electrónico de Gmail, conectándome directamente a smtp.gmail.com.

En primer lugar smpt.gmail.com no es un servidor de correo electrónico que acepta (de otros servidores de correo), sino más bien permitir Gmail los usuarios acceder y por lo tanto envían o consultar el correo electrónico. Si queremos averiguar los servidores de correo de Gmail que aceptan correos de otros servidores de correo.Podemos ejecutar el siguiente cmd en el terminal:

dig mx gmail.com +short

de salida:

10 alt1.gmail-smtp-in.l.google.com. 
40 alt4.gmail-smtp-in.l.google.com. 
5 gmail-smtp-in.l.google.com. 
30 alt3.gmail-smtp-in.l.google.com. 
20 alt2.gmail-smtp-in.l.google.com. 

Desde gmail-smtp-in.l.google.com. tiene el valor más bajo de que lo utilizan como el preferido servidor de correo

Sin embargo, preferiría no tener la contraseña de gmail en el script. Según lo que he leído, parece que Gmail requiere autenticación antes de entregar cualquier correo, incluso a sus propios usuarios.

Exactamente uno utiliza smtp.gmail.com para iniciar sesión y enviar/revisar los correos electrónicos a/desde sus respectivas cuentas, por lo tanto, se requiere credenciales de usuario. Sin embargo, no necesitamos credenciales en el envío de correos electrónicos a su servidor de correo es decir gmail-smtp-in.l.google.com (Ejemplo a continuación)

Mi pregunta es, ¿cómo está el correo procedente de otro servidor SMTP entregado, ya que ese servidor SMTP no tendrá credenciales de Gmail. ¿Gmail solo requiere autenticación para remitentes "anónimos", y como mi script se ejecuta en una computadora personal, está sujeto a una mayor seguridad? Aquí está el script en Python Me postulo:

Como ya he explicado bien de la discusión anterior que no necesitamos credenciales de Gmail para conectarse a los servidores de correo de Gmail , sin embargo, si nos conectamos a servidores de correo de Gmail usando computadoras personales, podemos enviar algunos correos electrónicos, pero para enviar más correos electrónicos necesitamos construir reputación de dominio y responsabilidad usando DKIM, SPF, etc. (Eso es un espectro completamente diferente).

La siguiente secuencia de comandos de python envía un correo electrónico a una cuenta de Gmail sin autenticación.

import smtplib 

fromaddr = '[email protected]' 
toaddrs = ['[email protected]'] 
msg = ''' 
    From: {fromaddr} 
    To: {toaddr} 
    Subject: testin'  
    This is a test 
    . 
''' 

msg = msg.format(fromaddr =fromaddr, toaddr = toaddrs[0]) 
# The actual mail send 
server = smtplib.SMTP('gmail-smtp-in.l.google.com:25') 
server.starttls() 
server.ehlo("example.com") 
server.mail(fromaddr) 
server.rcpt(toaddrs[0]) 
server.data(msg) 
server.quit() 

O pruebe el siguiente fragmento de código Telnet

telnet gmail-smtp-in.l.google.com 25 

HELO sendingdomain.com 

MAIL FROM:<[email protected]> 

RCPT TO:<[email protected]> 

DATA 
From: <[email protected]> 
To: <[email protected]> 
Subject: Just a test email 

The body of the mail goes here.   
. 

QUIT 
+0

aquí "25" representan qué? @MaK –

+0

25 es el puerto SMTP, utilizado para las comunicaciones con los servidores de correo. https://en.m.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol – MaK

+0

sí @Mak pero ¿está estático? o dinámico? ¿Hay algún puerto disponible? –

Cuestiones relacionadas