'How to send an email without login to server in Python

I want to send an email without login to server in Python. I am using Python 3.6. I tried some code but received an error. Here is my Code :

import smtplib                          

smtpServer='smtp.yourdomain.com'      
fromAddr='[email protected]'         
toAddr='[email protected]'     
text= "This is a test of sending email from within Python."
server = smtplib.SMTP(smtpServer)
server.set_debuglevel(1)         
server.sendmail(fromAddr, toAddr, text) 
server.quit()

I expect the mail should be sent without asking user id and password but getting an error :

"smtplib.SMTPSenderRefused: (530, b'5.7.1 Client was not authenticated', '[email protected]')"



Solution 1:[1]

The code below worked for me. First, I opened/enabled Port 25 through Network Team and used it in the program.

import smtplib                          
smtpServer='smtp.yourdomain.com'      
fromAddr='[email protected]'         
toAddr='[email protected]'     
text= "This is a test of sending email from within Python."
server = smtplib.SMTP(smtpServer,25)
server.ehlo()
server.starttls()
server.sendmail(fromAddr, toAddr, text) 
server.quit()

Solution 2:[2]

I am using like this. It's work to me in my private SMTP server.

import smtplib

host = "server.smtp.com"
server = smtplib.SMTP(host)
FROM = "[email protected]"
TO = "[email protected]"
MSG = "Subject: Test email python\n\nBody of your message!"
server.sendmail(FROM, TO, MSG)

server.quit()
print ("Email Send")

Solution 3:[3]

import win32com.client as win32
outlook=win32.Dispatch('outlook.application')
mail=outlook.CreateItem(0)
mail.To='To address'
mail.Subject='Message subject'
mail.Body='Message body'
mail.HTMLBody='<h2>HTML Message body</h2>' #this field is optional

# To attach a file to the email (optional):
attachment="Path to the attachment"
mail.Attachments.Add(attachment)

mail.Send()

Solution 4:[4]

First, you have to have a SMTP server to send an email. When you don't have one, usually outlook's server is used. But outlook only accepts authenticated users, so if you don't want to login into the server, you have to pick a server that doesn't need authentication.

A second approach is to setup an internal SMTP server. After you setup the internal SMTP server, you can use the "localhost" as the server to send the email. Like this:

import smtplib
receiver = '[email protected]'
sender = '[email protected]'
smtp = smtplib.SMTP('localhost')

subject = 'test'
body = 'testing plain text message'
msg = 'subject: ' + subject + ' \n\n' + body

smtp.sendmail('sender', receiver, msg)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Elijah
Solution 2 Marcelo Abreu
Solution 3 shivam sharma
Solution 4 Thiago Machado