¿Cómo enviar un correo directamente al servidor SMTP sin autenticación?

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 .

Sin embargo, preferiría no tener la contraseña de gmail en el script. Por 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 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 dado que mi script se ejecuta en una computadora personal, está sujeto a una mayor seguridad? Aquí está el script de python que estoy ejecutando:

 import smtplib import email msg = email.message.Message() msg["From"] = "user@gmail.com" msg["To"] = "user@gmail.com" msg["Subject"] = "Test message" server = smtplib.SMTP("smtp.gmail.com",587) server.starttls() server.ehlo_or_helo_if_needed() try: failed = server.sendmail("user@gmail.com","user@gmail.com", 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', 'user@gmail.com') 

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

Puede usar algunos servidores SMTP externos sin autenticación (o un SMTP local), pero el filtro de spam de Google detectará el mensaje enviado porque el mensaje “[De”) es @ google.com , mientras que el SMTP real no es smtp.gmail .com .

Esos servidores SMTP también deben tener una zona inversa correcta en el DNS del ISP y, de lo contrario, Google bloqueará este smtp.

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, smtp.gmail.com no es un servidor de correo que acepta correo (de otros servidores de correo), sino que permite a los usuarios de Gmail iniciar sesión y, por lo tanto, enviar o revisar 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 la terminal:

dig mx gmail.com +short

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 5, lo usamos como el servidor de correo preferido

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

Exactamente uno usa smtp.gmail.com para iniciar sesión y enviar / revisar correos electrónicos a / desde sus respectivas cuentas, por lo tanto, requerimos credenciales de usuario. Sin embargo, no necesitamos credenciales para enviar 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 se entrega el correo 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 dado que mi script se ejecuta en una computadora personal, está sujeto a una mayor seguridad? Aquí está el script de python que estoy ejecutando:

Como me he aclarado de la discusión anterior, no necesitamos las credenciales de Gmail para conectarse a los servidores de correo de Gmail , sin embargo, si nos conectamos a servidores de correo de Gmail utilizando computadoras personales, podemos enviar algunos correos electrónicos, pero para enviar más correos Necesidad de crear reputación y responsabilidad en el dominio utilizando 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 = 'sending@example.com' toaddrs = ['receiving@gmail.com'] 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 prueba el siguiente fragmento de Telnet

 telnet gmail-smtp-in.l.google.com 25 HELO sendingdomain.com MAIL FROM: RCPT TO: DATA From:  To:  Subject: Just a test email The body of the mail goes here. . QUIT 

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