Getting errors connecting to mail servers using SMTP in python - python

I want to send a mail using smtplib in python. I tried to connect to the gmail server and protonmail server.But getting these errors,
When trying to connect to Gmail server,
import smtplib
server=smtplib.SMTP('smtp.gmail.com',465)
Error: "A connection attempt failed because the connected party did not properly respond after a period of time"
When trying to connect to protonmail server,
import smtplib
Server=smtplib.SMTP('127.0.0.1',1025)
Error: "No connection could be made because the target machine actively refused it."
Please let me know how can I resolve it.

Try this for email,
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("yourmail#gmail.com", "yourpassword")

Related

Why am I getting this error: "TimeoutError: [Errno 110] Connection timed out" using python code in Pycharm?

import smtplib
my_email = "*******#gmail.com"
password = "***********"
with smtplib.SMTP("smtp.gmail.com") as connection:
connection.starttls()
connection.login(user=my_email, password=password)
connection.sendmail(from_addr=my_email, to_addrs="*******#yahoo.com",
msg="Subject:Hello\n\n This is the body of my email.")
In gmail the "less secure apps" feature was enabled. Conversely, in Yahoo, the "Generate App Password" feature was used and still got the same response for both instances.
There can be many reasons for this error - typically it means something has gone wrong in setting up the smtplib connection and your email hasn't set.
To get a more descriptive and helpful error message, you need to enable debugging.
To do that add, add this line of code:
connection.set_debuglevel(1)
That will print out much more descriptive debugger messages to the console.
try to set a port like 465 for gmail, smptlib.SMTP("smtp.gmail.com", 465)
if none of that work try to change your transfer security from starttls() to SMTP_SSL, so your code look like this:
import smtplib, ssl #import ssl module
port = 465 # For SSL
# Create a secure SSL context
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
server.login(my_email, password)
server.sendmail(from_addr=my_email, to_addrs=reciver_email, msg=message)

Sending mail with through python with roundcube

Am trying to send mail with python using my rouncube webmail but when i run it outputs this error TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
I checked in my mail and my port is "290" which have provided but when i run the function the mail doesn't send. I know how to send with gmail by turning on less secure app access but don't know how to work around to send with my webmail.
I need your suggestion to work around it.
from smtplib import SMTP_SSL as SMTP
import logging, logging.handlers, sys
from email.mime.text import MIMEText
def send_message():
text = '''
Hello,
Trying to send mail from my webmail in python 3.
Sincerely,
My name
'''
message = MIMEText(text, 'plain')
message['Subject'] = "Email Subject"
my_email = 'joe#mycompany.com'
# Email that you want to send a message
message['To'] = my_email
# You need to change here, depending on the email that you use.
# For example, Gmail and Yahoo have different smtp. You need to know what it is.
connection = SMTP('smtp.roundcube.com', 290)
connection.set_debuglevel(True)
# Attention: You can't put for example: 'your_address#email.com'.
# You need to put only the address. In this case, 'your_address'.
connection.login('fred.kings', 'fredsw321a')
try:
# sendemail(<from address>, <to address>, <message>)
connection.sendmail(my_email, my_email, message.as_string())
finally:
connection.close()
send_message()
I'm using:
Ubuntu 18.04.4 LTS.
Python 3.7.4
Jupyter-Notebook 6.0.1
Anaconda 1.7.2
I can successfully send an email through Python with Roundcube, executing the following script in a jupyter-notebook cell:
import smtplib
email = "myemail#mycompany.com"
password = "mypassword"
to = ["destination#dest.com"]
with smtplib.SMTP_SSL('mail.mycompany.com', 465) as smtp:
smtp.login(email, password)
subject = "testing mail sending"
body = "the mail itself"
msg = "Subject: {}\n\n{}".format(subject, body)
smtp.sendmail(email, to, msg)
I found this information as follows (so you can find yours):
Log into you company email.
Look for the following image and click on it (Webmail Home).
You'll see something like the following:
Scroll down, looking for the following image and click on it (Configure Mail...).
Look for the info at mail server section.
If there are using port 465 (such as in my case) it means that you want to use smtplib.SMTP_SSL instead of smtplib.SMTP.
NOTE: The previous worked for me from my personal computer, however, when I tried to use the same code, from my "virtual machine" at office, it does not work, which makes me think that there is a system limitation, and that the problem is not code-related.
Hope it helps, regards.

Python SMTP Issue with Gmail

Did anything change with gmail SMTP? I was able to use it to send emails a few months ago. However, I have tried the following code and I get a timeout error every time:
import smtplib
s = smtplib.SMTP('smtp.gmail.com', 587)
I have also tried
s = smtplib.SMTP_SSL('smtp.gmail.com', 587)
and I still get a timeout error. I have also tried port 465. Almost all posts or articles about using smtplib to connect to gmail are from a long time ago. Did anything change recently?
I checked and incoming connections are set as disabled for python on my machine's firewall. However, I also tried the same code from a server that does not have any firewall settings involving python and I get [WinError 10061] No connection could be made because the target machine actively refused it.
I am on windows.

Office365 smtp server does not respond to ehlo() in python

I am trying to use Office365 smtp server for automatically sending out emails. My code works previously with gmail server, but not the Office365 server in Python using smtplib.
My code:
import smtplib
server_365 = smtplib.SMTP('smtp.office365.com', '587')
server_365.ehlo()
server_365.starttls()
The response for the ehlo() is: (501, '5.5.4 Invalid domain name [DM5PR13CA0034.namprd13.prod.outlook.com]')
In addition, .starttls() raises a SMTPException: STARTTLS extension not supported by server
Any idea why this happens?
The smtplib ehlo function automatically adds the senders host name to the EHLO command, but Office365 requires that the domain be all lowercase, so when youe default host name is uppercase it errors.
You can fix by explicitly setting sender host name in the ehlo command to anything lowercase.
import smtplib
server_365 = smtplib.SMTP('smtp.office365.com', '587')
server_365.ehlo('mylowercasehost')
server_365.starttls()
I had to put SMTP EHLO before and after starttls().
Thanks!
import smtplib
server_365 = smtplib.SMTP('smtp.office365.com', '587')
server_365.ehlo('mylowercasehost')
server_365.starttls()
server_365.ehlo('mylowercasehost')

Connection refused when sending email using Scrapy mail module

I am trying to send email after scraping using Scrapy, but I get this error:
2017-02-25 12:44:44 [scrapy.mail] ERROR: Unable to send mail: To=['<my_email>#gmail.com'] Cc=['<my_email>#gmail.com'] Subject="Test" Attachs=0- Connection was refused by other side: 10061: No connection could be made because the target machine actively refused it..
This is the code:
mailer = scrapy.mail.MailSender.from_settings(scrapy.conf.settings)
mailer.send(to=["<my_email>#gmail.com"], subject="Test",
body="Test", cc=["<my_email>#gmail.com"])
How can I send email successfully using Scrapy MailSender()
To send email you need an SMTP server that allows you to send email, and to configure the connection to that SMTP server through mail settings like MAIL_HOST and MAIL_PORT.
If you search the internet for the name of your email provider (e.g. Kolab Now, Google Mail) and "SMTP", you should be able to find the settings you need to use.

Categories

Resources