Python Email, [Errno 10061] No connection could be made because the target machine actively refused it

流过昼夜 提交于 2019-12-20 02:57:09

问题


I want to send a mail in using python, below is my code, but I got the error 10061 at the end, hope anyone can help me, thanks!

import smtplib
fromaddr = 'XXX@XX.com'
toaddrs  = 'XXX@XX.com    '
msg = 'Why,Oh why!'
username = 'XXXXXX'
password = 'XXXXXX'
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

error msg:socket.error: [Errno 10061] No connection could be made because the target machine actively refused it


回答1:


As mentioned by Cid-EL, You have to enable less secure apps in GMAIL settings

However, It's not secure to turn on that perticular option.

Gmail provides API's to perform mail operations. GMAIL API's are supported in many languages.

For Python API : Python with Gmail

For Java API's : Java with Gmail

Little more effort but you can have a secure connection !!

Step 1: Turn on the GMAIL API

Step 2: Install Google client library

pip install --upgrade google-api-python-client

Step 3: Code sample to send a mail using GMAIL API

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
   import argparse
   flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
   flags = None

# If modifying these scopes, delete your previously saved credentials 
# at ~/.credentials/gmail-python-quickstart.json
SCOPES = "https://mail.google.com/"
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Gmail API Python Quickstart'


def get_credentials():
  """Gets valid user credentials from storage.

  If nothing has been stored, or if the stored credentials are invalid,
  the OAuth2 flow is completed to obtain the new credentials.

  Returns:
    Credentials, the obtained credential.
  """
   home_dir = os.path.expanduser('~')
   credential_dir = os.path.join(home_dir, '.credentials')
   if not os.path.exists(credential_dir):
      os.makedirs(credential_dir)
   credential_path = os.path.join(credential_dir,
                                'gmail-python-quickstart.json')

   store = oauth2client.file.Storage(credential_path)
   credentials = store.get()
   if not credentials or credentials.invalid:
      flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
      flow.user_agent = APPLICATION_NAME
      if flags:
         credentials = tools.run_flow(flow, store, flags)
      else: # Needed only for compatibility with Python 2.6
         credentials = tools.run(flow, store)
      print('Storing credentials to ' + credential_path)
   return credentials

# create a message
def CreateMessage(sender, to, subject, message_text):
  """Create a message for an email.

  Args:
    sender: Email address of the sender.
    to: Email address of the receiver.
    subject: The subject of the email message.
    message_text: The text of the email message.

  Returns:
    An object containing a base64 encoded email object.
  """
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    return {'raw': base64.b64encode(message.as_string())}

#send message 
def SendMessage(service, user_id, message):
    """Send an email message.

    Args:
     service: Authorized Gmail API service instance.
     user_id: User's email address. The special value "me"
     can be used to indicate the authenticated user.
     message: Message to be sent.

    Returns:
     Sent Message.
    """
    try:
        message = (service.users().messages().send(userId=user_id, body=message).execute())
        #print 'Message Id: %s' % message['id']
        return message
    except errors.HttpError, error:
        print ('An error occurred: %s' % error)


def main():
    """Shows basic usage of the Gmail API.
       Send a mail using gmail API
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)

    msg_body = "test message"

    message = CreateMessage("xxxxx@gmail.com", "yyy@gmail.com", "Status report of opened tickets", msg_body)

    SendMessage(service, "me", message)

if __name__ == '__main__':
    main()

Let me know if it won't work.

Hope it helps !!




回答2:


as far as i know Gmail and other companies have security to prevent emails beeing sent from unknown sources, here is a link to turn that kind of security of:

https://www.google.com/settings/security/lesssecureapps

there you can modify the account sothat it will accept the email

i also use this code to send a email:

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from_adres = ‘VAN_eposadres@gmail.com'

to_adres = ‘NA_eposadres@gmail.com'

epos_liggaam = MIMEMultipart('alternatief')

epos_liggaam['Subject'] = "DIE OPSKRIF"

epos_liggaam['From'] = from_adres

epos_liggaam['To'] = to_adres

boodskap = MIMEText("Hierdie is die boodskap gedeelte van

die epos", 'plain')

epos_liggaam.attach(boodskap)

mail = smtplib.SMTP('smtp.gmail.com',587)

mail.ehlo()

mail.starttls()

mail.login(van_adres,'wagwoord')

mail.sendmail(van_adres,na_adres,epos_liggaam.as_string())

mail.close()

hope this helped!

thanks!



来源:https://stackoverflow.com/questions/37960035/python-email-errno-10061-no-connection-could-be-made-because-the-target-machi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!