পাইথন ব্যবহার করে কীভাবে Gmail এর সাথে ইমেল প্রেরণ করবেন?


289

আমি পাইথন ব্যবহার করে ইমেল (জিমেইল) প্রেরণের চেষ্টা করছি তবে আমি নিম্নলিখিত ত্রুটি পাচ্ছি।

Traceback (most recent call last):  
File "emailSend.py", line 14, in <module>  
server.login(username,password)  
File "/usr/lib/python2.5/smtplib.py", line 554, in login  
raise SMTPException("SMTP AUTH extension not supported by server.")  
smtplib.SMTPException: SMTP AUTH extension not supported by server.

পাইথন লিপিটি নীচে রয়েছে।

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

16
এই প্রশ্নটি এখন আনলক করা উচিত যে গুগল জিমেইলের মাধ্যমে বার্তা প্রেরণের জন্য একটি অভ্যন্তরীণ এপিআইয়ের দিকে এগিয়ে চলেছে। এই পদক্ষেপটি উত্তরগুলির মধ্যে একটি বাদে সমস্ত পুরানো হয়ে যায় এবং প্রাসঙ্গিক উত্তরটি সমস্যাটি সমাধান করার ক্ষেত্রে খুব হালকা।
অ্যান্ড্রু

এছাড়াও, ভিপিএন ব্যবহারকারীদের জন্য, যদি সমস্যাটি এখনও অব্যাহত থাকে তবে আপনার ভিপিএন বন্ধ করুন। এটা আমার জন্য কাজ করেছে।
পল

উত্তর:


211

EHLOখালি সরাসরি চালানোর আগে আপনাকে বলতে হবে STARTTLS:

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()

এছাড়াও আপনি সত্যিই তৈরি করা উচিত From:, To:এবং Subject:বার্তা শিরোলেখ, একটি ফাঁকা লাইন এবং ব্যবহার দ্বারা বার্তার মূল থেকে বিচ্ছিন্ন CRLFEOL চিহ্নিতকারী হিসাবে।

যেমন

msg = "\r\n".join([
  "From: user_me@gmail.com",
  "To: user_you@gmail.com",
  "Subject: Just a message",
  "",
  "Why, oh why"
  ])

2
সার্ভার.সেইন্ডমেল (ফ্রোমড্ডার, টুড্ডার্স, _ ইভিচ) দ্বিতীয় প্যারামিটার, টোড্ডারদের অবশ্যই একটি তালিকা হতে হবে, toaddrs = ['user_me@gmail.com']
ম্যাসিমো ফাজলোলারি

14
আগস্ট 2014 এর হিসাবে এই এখন smtplib.SMTPAuthenticationError উত্থাপন: (534, '5.7.9 অ্যাপ্লিকেশন-নির্দিষ্ট পাসওয়ার্ড প্রয়োজন।
anon58192932

7
যদিও আমার জন্য, পাইথনের মাধ্যমে ইমেলগুলি প্রেরণ করতে @google অ্যাকাউন্ট ব্যবহার করে লগ ইন করতে আমাকে একটি 'অ্যাপ' পাসওয়ার্ড সক্ষম করতে হবে: সমর্থন.
google.com/accounts/answer/…

1
: এখানে একাধিক ব্যক্তি মেইল কিভাবে একটি লিঙ্ক এর stackoverflow.com/questions/8856117/...
anon58192932

1
আমি একবার টেলনেট দ্বারা একটি এসএমটিপি সার্ভারে লগ ইন করেছি এবং টাইপোর মাধ্যমে প্রেরণ করেছি EHLO। আমি অনেকবার হেলো চেষ্টা করার পরেও প্রতিক্রিয়া ছিল ভিন্ন। এটি বুঝতে ঘন্টা সময় লেগেছিল যে EHLO আসলে একটি কমান্ড যা এসএমটিপি বুঝতে পারে এবং আমি টাইপও করেছি।
শিপলু মোকাদ্দিম

297
def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

আপনি যদি পোর্ট 465 ব্যবহার করতে চান তবে আপনাকে একটি SMTP_SSLবিষয় তৈরি করতে হবে :

# SMTP_SSL Example
server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)  
# ssl server doesn't support or need tls, so don't call server_ssl.starttls() 
server_ssl.sendmail(FROM, TO, message)
#server_ssl.quit()
server_ssl.close()
print 'successfully sent the mail'

2
খুব সুন্দর নমুনা ধন্যবাদ। আমার মনে হয়েছে যে আমি একটি এসএসএল সংযোগ ব্যবহার করতে চাইলে আমাকে সার্ভার.সার্টল্টস ()
ডাউলারগুলি

18
আর দুর্ভাগ্যবশত কাজ করে না: smtplib.SMTPAuthenticationError: (534, '5.7.14 < accounts.google.com/... ... দয়া করে আপনার ওয়েব ব্রাউজারের মাধ্যমে লগ ইন করুন এবং \ n5.7.14 তারপর আবার চেষ্টা করুন \ n5.7.14 উপায় সম্পর্কে জানুন। আরও \ n5.7.14 সমর্থন . google.com/mail/bin/answer.py?answer=78754 ... এর পরে আমি গুগল থেকে একটি মেল পেয়েছি যে সন্দেহজনক সংযোগের চেষ্টা হয়েছে
রোজক্যাট

13
@ রাইস্ক্যাট - আপনাকে যা করতে হবে তা হ'ল একটি অ্যাপ্লিকেশন পাসওয়ার্ড তৈরি করা এবং এটি আপনার অ্যাকাউন্টের পাসওয়ার্ডের পরিবর্তে ব্যবহার করা। এখানে একটি অ্যাপ্লিকেশন পাসওয়ার্ড তৈরি করুন: security.google.com/settings/security/apppasswords
জেরেড

15
@ রাইস্ক্যাট: আপনি যে সমস্যার মুখোমুখি হচ্ছেন আমি তার সমাধান পেতে পেরেছি। গুগলের কম সুরক্ষিত অ্যাপ্লিকেশনগুলিতে অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি সেটিংস রয়েছে আপনার কেবল এটি 'চালু' করতে হবে। আপনি সেখান থেকে এখানে আসতে পারেন: গুগল -> আমার অ্যাকাউন্ট -> সাইন ইন এবং সুরক্ষা -> সংযুক্ত অ্যাপস এবং সাইটগুলি -> স্ক্রোল ডাউন করে আপনি 'কম সুরক্ষিত অ্যাপ্লিকেশনগুলিকে মঞ্জুরি দিন' পাবেন
শেলেন মোহন

2
যদি আপনার জিমেইলটি দ্বি-ফ্যাক্টর প্রমাণীকরণের মাধ্যমে সুরক্ষিত হয় তবে আপনাকে অবশ্যই প্রথমে একটি নির্দিষ্ট সুনির্দিষ্ট পাসওয়ার্ড তৈরি করতে হবে -> তারপরে উপরের উদাহরণ কোডের জন্য সেই অ্যাপ্লিকেশন-পাসওয়ার্ডটি ব্যবহার করুন (এটি অত্যন্ত গুরুত্বপূর্ণ কারণ তখন আপনি কোথাও নিজের পাসওয়ার্ডটি লিখছেন না) স্পষ্টতালিকাতে এবং আপনি যে কোনও সময় অ্যাপ্লিকেশন-পাসওয়ার্ড বাতিল করতে পারেন)।
ট্রেভর বয়েড স্মিথ

136

আমি একই ধরণের সমস্যায় পড়েছি এবং এই প্রশ্নে হোঁচট খেয়েছি। আমি একটি এসএমটিপি প্রমাণীকরণ ত্রুটি পেয়েছি তবে আমার ব্যবহারকারীর নাম / পাসটি সঠিক ছিল। এখানে এটি স্থির করা হয়েছে। আমি এটি পড়েছি:

https://support.google.com/accounts/answer/6010255

সংক্ষেপে, গুগল আপনাকে এসএমটিপ্লিবের মাধ্যমে লগ ইন করার অনুমতি দিচ্ছে না কারণ এটি এই ধরণের লগইনটিকে "কম সুরক্ষিত" হিসাবে চিহ্নিত করেছে, তাই আপনি যখন নিজের গুগল অ্যাকাউন্টে লগ ইন করেছেন তখন আপনাকে যা করতে হবে তা এই লিঙ্কে যেতে হবে, এবং অ্যাক্সেসের অনুমতি দিন:

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

এটি সেট হয়ে গেলে (নীচে আমার স্ক্রিনশটটি দেখুন), এটি কাজ করা উচিত।

এখানে চিত্র বর্ণনা লিখুন

লগইন এখন কাজ করে:

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('me@gmail.com', 'me_pass')

পরিবর্তনের পরে প্রতিক্রিয়া:

(235, '2.7.0 Accepted')

পূর্বে প্রতিক্রিয়া:

smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 g66sm2224117qgf.37 - gsmtp')

এখনও কাজ করছে না? আপনি যদি এখনও SMTPAuthenticationError পান তবে এখন কোডটি 534, কারণ এটি অজানা। এই লিঙ্কটি অনুসরণ করুন:

https://accounts.google.com/DisplayUnlockCaptcha

অবিরত ক্লিক করুন এবং এটি আপনার নতুন অ্যাপ্লিকেশনটি নিবন্ধ করার জন্য 10 মিনিট সময় দেবে। সুতরাং এখনই অন্য একটি লগইন প্রচেষ্টা চালিয়ে যান এবং এটি কাজ করা উচিত।

আপডেট : এটি এখনই কাজ করবে বলে মনে হচ্ছে না স্ট্যাম্পলিবের মধ্যে এই ত্রুটিটি পেয়ে আপনি কিছুক্ষণ আটকে থাকতে পারেন:

235 == 'Authentication successful'
503 == 'Error: already authenticated'

বার্তাটি সাইন ইন করতে ব্রাউজারটি ব্যবহার করতে বলে:

SMTPAuthenticationError: (534, '5.7.9 Please log in with your web browser and then try again. Learn more at\n5.7.9 https://support.google.com/mail/bin/answer.py?answer=78754 qo11sm4014232igb.17 - gsmtp')

'কম সিকিউর অ্যাপস' সক্ষম করার পরে, একটি কফির জন্য যান, ফিরে আসুন এবং আবার 'ডিসপ্লেউনলকপ্যাচচা' লিঙ্কটি চেষ্টা করুন। ব্যবহারকারীর অভিজ্ঞতা থেকে, পরিবর্তনটি কিক ইন করতে এক ঘন্টা সময় নিতে পারে Then তারপরে আবার সাইন ইন প্রক্রিয়াটি চেষ্টা করুন।


3
হ্যাঁ, আপনাকে ধন্যবাদ ! ফ্লাস্ক-মেল ব্যবহার করার সময় ঘটেছিল
জিয়ান্নিস

1
ধন্যবাদ মানুষ আমার জন্য একমাত্র সমস্যা: accounts.google.com/DisplayUnlockCaptcha
সীমাহীন ঈসা

6
এছাড়াও, সেটিংস পরিবর্তন করতে দয়া করে আধ ঘন্টা থেকে এক ঘন্টা রেখে দিন। আমি একটি নতুন অ্যাকাউন্ট তৈরি করেছি, সমস্ত যুক্ত সুরক্ষা অক্ষম করেছি এবং এখনও একই ত্রুটি পেয়েছি। প্রায় এক ঘন্টা পরে, এটি সব কাজ করে।
jkgeyti

2
আপনার কাছে "২-পদক্ষেপ যাচাইকরণ" সক্ষম থাকলে কম সুরক্ষিত অ্যাপ্লিকেশন সক্ষম করা সম্ভব নয়। সবচেয়ে ভাল এবং সবচেয়ে নিরাপদ বিকল্প "apppassword" সক্ষম করা security.google.com/settings/security/apppasswords ইতিমধ্যে প্রস্তাবিত, এবং এটি একটি যাদুমন্ত্র মত কাজ করে
Omiod

2
আমি যখন এপাসওয়ার্ডস লিঙ্কটি অনুসরণ করি তখন আমার সমস্ত Google অ্যাকাউন্টগুলি "আপনি যে সেটিংসটি সন্ধান করছেন সেটি আপনার অ্যাকাউন্টের জন্য উপলভ্য নয়)" ত্রুটি পাওয়া যায়।
সুজান

18

আপনি ওওপি দিয়ে নিচে?

#!/usr/bin/env python


import smtplib

class Gmail(object):
    def __init__(self, email, password):
        self.email = email
        self.password = password
        self.server = 'smtp.gmail.com'
        self.port = 587
        session = smtplib.SMTP(self.server, self.port)        
        session.ehlo()
        session.starttls()
        session.ehlo
        session.login(self.email, self.password)
        self.session = session

    def send_message(self, subject, body):
        ''' This must be removed '''
        headers = [
            "From: " + self.email,
            "Subject: " + subject,
            "To: " + self.email,
            "MIME-Version: 1.0",
           "Content-Type: text/html"]
        headers = "\r\n".join(headers)
        self.session.sendmail(
            self.email,
            self.email,
            headers + "\r\n\r\n" + body)


gm = Gmail('Your Email', 'Password')

gm.send_message('Subject', 'Message')

33
যদি আপনার শ্রেণিতে কেবল দুটি পদ্ধতি থাকে, যার একটি __init__, কেবল একটি ফাংশন ব্যবহার করুন।
জোয়কিউয়ারি

আপনি কীভাবে এই পদ্ধতিটি ব্যবহার করে একটি সংযুক্তি যুক্ত করবেন?
sgerbhctim

ক্লাসটি ব্যবহার করা ভাল হবে যদি আপনি ক্লায়েন্টকে দীক্ষা দিতে চান এবং ইমেল এবং পাসওয়ার্ডের পাশ দিয়ে পাসওয়ার্ড না দিয়ে কোডের অন্যান্য অংশে পাস করতে চান। অথবা আপনি যদি প্রতিবার ইমেল এবং পাসওয়ার্ড না দিয়ে বেশ কয়েকটি বার্তা প্রেরণ করতে চান।
সামি

15

এইটা কাজ করে

Gmail অ্যাপ্লিকেশন পাসওয়ার্ড তৈরি করুন!

আপনি এটি তৈরির পরে একটি ফাইল তৈরি করুন sendgmail.py

তারপরে এই কোডটি যুক্ত করুন :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
# Created By  : Jeromie Kirchoff
# Created Date: Mon Aug 02 17:46:00 PDT 2018
# =============================================================================
# Imports
# =============================================================================
import smtplib

# =============================================================================
# SET EMAIL LOGIN REQUIREMENTS
# =============================================================================
gmail_user = 'THEFROM@gmail.com'
gmail_app_password = 'YOUR-GOOGLE-APPLICATION-PASSWORD!!!!'

# =============================================================================
# SET THE INFO ABOUT THE SAID EMAIL
# =============================================================================
sent_from = gmail_user
sent_to = ['THE-TO@gmail.com', 'THE-TO@gmail.com']
sent_subject = "Where are all my Robot Women at?"
sent_body = ("Hey, what's up? friend!\n\n"
             "I hope you have been well!\n"
             "\n"
             "Cheers,\n"
             "Jay\n")

email_text = """\
From: %s
To: %s
Subject: %s

%s
""" % (sent_from, ", ".join(sent_to), sent_subject, sent_body)

# =============================================================================
# SEND EMAIL OR DIE TRYING!!!
# Details: http://www.samlogic.net/articles/smtp-commands-reference.htm
# =============================================================================

try:
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_app_password)
    server.sendmail(sent_from, sent_to, email_text)
    server.close()

    print('Email sent!')
except Exception as exception:
    print("Error: %s!\n\n" % exception)

সুতরাং, আপনি যদি সফল হন তবে এই জাতীয় চিত্র দেখতে পাবেন:

আমি নিজের থেকে এবং নিজের কাছে একটি ইমেল প্রেরণ করে পরীক্ষা করেছি।

সফল ইমেল প্রেরণ করা হয়েছে।

দ্রষ্টব্য: আমার অ্যাকাউন্টে আমার 2-পদক্ষেপ যাচাইকরণ সক্ষম হয়েছে। অ্যাপ পাসওয়ার্ড এটি দিয়ে কাজ করে! (জিমেইল এসএমটিপি সেটআপের জন্য আপনাকে অবশ্যই https://support.google.com/accounts/answer/185833?hl=en এ গিয়ে নীচের পদক্ষেপগুলি অনুসরণ করতে হবে )

২-পদক্ষেপ যাচাইকরণ সক্ষম করা অ্যাকাউন্টগুলির জন্য এই সেটিংটি উপলভ্য নয়। এই জাতীয় অ্যাকাউন্টগুলিতে কম সুরক্ষিত অ্যাপ্লিকেশন অ্যাক্সেসের জন্য একটি অ্যাপ্লিকেশন-নির্দিষ্ট পাসওয়ার্ডের প্রয়োজন।

কম সুরক্ষিত অ্যাপ্লিকেশন অ্যাক্সেস ... এই সেটিংটি 2-পদক্ষেপ যাচাইকরণ সক্ষম করা অ্যাকাউন্টগুলির জন্য উপলব্ধ নয়।


1
চমত্কার সমাধান এবং খুব ভাল কোডে ব্যাখ্যা করা হয়েছে। আপনাকে ধন্যবাদ জে, অনেক প্রশংসা। বোবা প্রশ্ন: আপনি কি জানেন যে প্রতিদিন ইমেলের সর্বাধিক সীমাটি কী পাঠানো যেতে পারে (জিমেইল সহ)?
অ্যাঞ্জেলো

আপনাকে ধন্যবাদ অ্যাঞ্জেলো তবে হ্যাঁ এর একটি সীমা আছে, GMail = 500 ইমেল বা 500 প্রাপক / ডে রেফ: সমর্থন. google.com/mail/answer/22839 জি স্যুইটি আলাদা এবং 2000 বার্তা / দিন এবং এখানে পাওয়া যাবে: সমর্থন .google.com / a / উত্তর / 166852 শুভকামনা !
জয়রিজ্জো

2
অন্য সমস্তই পুরানো পোস্ট এবং সম্ভবত কাজ করছেন না, তবে এটি 100% কাজ করছে। অ্যাপ্লিকেশন পাসওয়ার্ড তৈরি করুন। উত্তরের জন্য ধন্যবাদ
শুভ

1
আমি কিছুটা অবাক হয়েছি যে এই সমাধানটির আরও বেশি অগ্রগতি নেই। আমি অন্য সকলকে চেষ্টা করে দেখিনি, তবে আমি বেশ কয়েকটি চেষ্টা করেছি, এবং কেবলমাত্র 0 টিঙ্কিংয়ের সাহায্যে এই বাক্সটি তৈরি করেছে।
ম্যাকউথন

14

আপনি এটি এখানে খুঁজে পেতে পারেন: http://jayrambhia.com/blog/send-emails-using-python

smtp_host = 'smtp.gmail.com'
smtp_port = 587
server = smtplib.SMTP()
server.connect(smtp_host,smtp_port)
server.ehlo()
server.starttls()
server.login(user,passw)
fromaddr = raw_input('Send mail by the name of: ')
tolist = raw_input('To: ').split()
sub = raw_input('Subject: ')

msg = email.MIMEMultipart.MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = email.Utils.COMMASPACE.join(tolist)
msg['Subject'] = sub  
msg.attach(MIMEText(raw_input('Body: ')))
msg.attach(MIMEText('\nsent via python', 'plain'))
server.sendmail(user,tolist,msg.as_string())

2
প্লাস 1 কারণ আপনার নিজের ফর্ম্যাট স্ট্রিংকে হার্ডকোড করার চেয়ে মাইম তৈরি করা ভাল। কোনও সাধারণ পাঠ্য বার্তার জন্য কি মিমমল্টিপার্ট দরকার? : অথবা নিম্নলিখিত সঠিক stackoverflow.com/a/6270987/895245
郝海东冠状病六四事件法轮功সিরো Santilli

আপনি ইমেল পরিবর্তনশীল কোথায় ইনস্ট্যান্ট করবেন?
ম্যাডক্যাট

11

সরাসরি সম্পর্কিত নয় তবে এখনও উল্লেখযোগ্য মূল্য হ'ল আমার প্যাকেজটি gmail বার্তাগুলি প্রেরণকে সত্যই দ্রুত এবং বেদাহীন করার চেষ্টা করে। এটি ত্রুটির একটি তালিকা বজায় রাখার চেষ্টা করে এবং সঙ্গে সঙ্গে সমাধানের দিকে ইঙ্গিত করার চেষ্টা করে।

আপনি যা লিখেছেন ঠিক তা করার জন্য আক্ষরিকভাবে এই কোডটির প্রয়োজন হবে:

import yagmail
yag = yagmail.SMTP('user_me@gmail.com')
yag.send('user_you@gmail.com', 'Why,Oh why!')

বা একটি লাইনার:

yagmail.SMTP('user_me@gmail.com').send('user_you@gmail.com', 'Why,Oh why!')

প্যাকেজ / ইনস্টলেশনের জন্য দয়া করে গিট বা পাইপটি দেখুন , পাইথন 2 এবং 3 উভয়ের জন্য উপলব্ধ।


9

এখানে একটি জিপিএল এপিআই উদাহরণ রয়েছে। যদিও আরও জটিল, এটি আমি একমাত্র পদ্ধতিটি পেয়েছি যা 2019 সালে কাজ করে This এই উদাহরণটি এখান থেকে নেওয়া এবং পরিবর্তিত হয়েছিল:

https://developers.google.com/gmail/api/guides/sending

আপনার তাদের ওয়েবসাইটের মাধ্যমে গুগলের এপিআই ইন্টারফেস সহ একটি প্রকল্প তৈরি করতে হবে। এরপরে আপনাকে আপনার অ্যাপ্লিকেশনের জন্য GMAIL API সক্ষম করতে হবে। শংসাপত্রগুলি তৈরি করুন এবং তারপরে সেই শংসাপত্রগুলি ডাউনলোড করুন, এটি শংসাপত্রগুলি হিসাবে সংরক্ষণ করুন .জসন।

import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

from email.mime.text import MIMEText
import base64

#pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.send']

def create_message(sender, to, subject, msg):
    message = MIMEText(msg)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    # Base 64 encode
    b64_bytes = base64.urlsafe_b64encode(message.as_bytes())
    b64_string = b64_bytes.decode()
    return {'raw': b64_string}
    #return {'raw': base64.urlsafe_b64encode(message.as_string())}

def send_message(service, user_id, 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.
    Lists the user's Gmail labels.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('gmail', 'v1', credentials=creds)

    # Example read operation
    results = service.users().labels().list(userId='me').execute()
    labels = results.get('labels', [])

    if not labels:
        print('No labels found.')
    else:
        print('Labels:')
    for label in labels:
        print(label['name'])

    # Example write
    msg = create_message("from@gmail.com", "to@gmail.com", "Subject", "Msg")
    send_message( service, 'me', msg)

if __name__ == '__main__':
    main()

smtplib পুরোপুরি থ্রেড-নিরাপদ নয়, সুতরাং এতে সমবর্তী বার্তা প্রেরণে সমস্যা হবে। এটি সঠিক পন্থা।
dsbajna

2

এখন একটি জিমেইল এপিআই রয়েছে, যা আপনাকে ইমেল প্রেরণ করতে, ইমেলটি পড়তে এবং REST এর মাধ্যমে খসড়া তৈরি করতে দেয়। এসএমটিপি কলগুলির বিপরীতে, এটি অ-ব্লক করা যা অনুরোধের থ্রেডে (পাইথন ওয়েবসার্সের মতো) থ্রেড-ভিত্তিক ওয়েবসার্সগুলির জন্য ইমেল প্রেরণের জন্য ভাল জিনিস হতে পারে। এপিআইও বেশ শক্তিশালী।

  • অবশ্যই, ইমেলটি একটি নন-ওয়েবসার্ভার কাতারে দেওয়া উচিত, তবে বিকল্পগুলি থাকা ভাল।

আপনার যদি ডোমেনে গুগল অ্যাপস প্রশাসকের অধিকার থাকে তবে সেটআপ করা সবচেয়ে সহজ, কারণ এরপরে আপনি নিজের ক্লায়েন্টকে কম্বল অনুমতি দিতে পারেন। অন্যথায় আপনাকে OAuth প্রমাণীকরণ এবং অনুমতি নিয়ে ভাঁজ করতে হবে।

এখানে এটি প্রকাশের একটি সংক্ষিপ্তসার রয়েছে:

https://gist.github.com/timrichardson/1154e29174926e462b7a


2

@ ডেভিডের দুর্দান্ত উত্তর, জেনেরিক চেষ্টা ব্যতীত পাইথন 3 এর জন্য এখানে:

def send_email(user, password, recipient, subject, body):

    gmail_user = user
    gmail_pwd = password
    FROM = user
    TO = recipient if type(recipient) is list else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_user, gmail_pwd)
    server.sendmail(FROM, TO, message)
    server.close()

2

আপনার জিমেইল অ্যাকাউন্টে কম সুরক্ষিত অ্যাপ্লিকেশন সক্ষম করুন এবং (পাইথন> = 3.6) ব্যবহার করুন:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

gmailUser = 'XXXXX@gmail.com'
gmailPassword = 'XXXXX'
recipient = 'XXXXX@gmail.com'

message = f"""
Type your message here...
"""

msg = MIMEMultipart()
msg['From'] = f'"Your Name" <{gmailUser}>'
msg['To'] = recipient
msg['Subject'] = "Subject here..."
msg.attach(MIMEText(message))

try:
    mailServer = smtplib.SMTP('smtp.gmail.com', 587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmailUser, gmailPassword)
    mailServer.sendmail(gmailUser, recipient, msg.as_string())
    mailServer.close()
    print ('Email sent!')
except:
    print ('Something went wrong...')

1
সত্যিই দুর্দান্ত উত্তর। একগুচ্ছ সেরা, সুপার সংক্ষিপ্ত। ধন্যবাদ.
ব্রুস ডিন

ধন্যবাদ পেড্রো, আপনার উত্তর এটি সমাধান করেছে। বিএসডাব্লু একাধিক এলিয়াস সহ গসুইট ব্যবহার করে এমন কারও জন্য; শুধু আপনার Gmail একাউন্টে ওরফে যোগ নিম্নলিখিত support.google.com/mail/answer/22370?hl=en এবং আপনি প্রতিস্থাপন ওরফে ব্যবহারের মাধ্যমে পাঠাতে পারবেন <{gmailUser}>সঙ্গে <YourAlias>
লুকস্প্যান

1

পুরানো সমস্যা মনে হচ্ছে smtplib। ইন python2.7সব কাজ করে জরিমানা।

আপডেট : হ্যাঁ, server.ehlo()সাহায্য করতে পারে।


-1
    import smtplib

    fromadd='from@gmail.com'
    toadd='send@gmail.com'

    msg='''hi,how r u'''
    username='abc@gmail.com'
    passwd='password'

    try:
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.ehlo()
        server.starttls()
        server.login(username,passwd)

        server.sendmail(fromadd,toadd,msg)
        print("Mail Send Successfully")
        server.quit()

   except:
        print("Error:unable to send mail")

   NOTE:https://www.google.com/settings/security/lesssecureapps that                                                         should be enabled

আমি সাধারণ কোডটি পোস্ট করছি যা কীভাবে Gmail অ্যাকাউন্ট থেকে মেল প্রেরণ করবে তা করবে। আপনার যদি কোনও তথ্যের প্রয়োজন হয় তবে আমাকে জানান। আমি আশা করি যে কোডটি সমস্ত ব্যবহারকারীর জন্য সহায়তা করবে।
শ্যাম গুপ্ত

-2
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("fromaddress", "password")
msg = "HI!"
server.sendmail("fromaddress", "receiveraddress", msg)
server.quit()

পাইথন কোডটি ব্যবহার করে জিমেইলের মাধ্যমে একটি মেল প্রেরণের সহজ কোড। ঠিকানা থেকে আপনার জিমেইলআইডি এবং প্রাপ্তি ঠিকানা হ'ল মেল আইডি যা আপনি মেল প্রেরণ করেন।
স্যাম দিব্যা কুমার 14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.