@revant_one
Sir any suggestion on this?
I am totally stuck how to send email using private email id which dont have access to enable third party access.
Sir i tried using normal python code to send email using private email…its working fine using following code.
Blockquote
import base64
import imaplib
import json
import smtplib
import urllib.parse
import urllib.request
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import lxml.html
GOOGLE_ACCOUNTS_BASE_URL = ‘https://accounts.google.com’
REDIRECT_URI = ‘urn:ietf:wg:oauth:2.0:oob’
GOOGLE_CLIENT_ID = ‘1012971819541-ufm8kc9hgmio223krjppmiv8lsc7t5vl.apps.googleusercontent.com’
GOOGLE_CLIENT_SECRET = ‘C9hOXwCDMvVEmwLyg0Zjjl1s’
#GOOGLE_REFRESH_TOKEN = None
GOOGLE_REFRESH_TOKEN = ‘1//0gyNiODB_NrHqCgYIARAAGBASNwF-L9Ir52nse8zlNmmXDQc6otohl07i3-Qt0HiZZo5sYFRYTXDMyQpmZrA7fHU6PCJikb1Qd0k’
MAIL_ERP= {
‘USER’: ‘*@.in’,
‘PASS’: ‘********’,
‘CLIENT_ID’: ‘1012971819541-ufm8kc9hgmio223krjppmiv8lsc7t5vl.apps.googleusercontent.com’,
‘CLIENT_SECRET’: ‘C9hOXwCDMvVEmwLyg0Zjjl1s’,
‘REFRESH_TOKEN’: ‘1//0gyNiODB_NrHqCgYIARAAGBASNwF-L9Ir52nse8zlNmmXDQc6otohl07i3-Qt0HiZZo5sYFRYTXDMyQpmZrA7fHU6PCJikb1Qd0k’,
}
def command_to_url(command):
return ‘%s/%s’ % (GOOGLE_ACCOUNTS_BASE_URL, command)
def url_escape(text):
return urllib.parse.quote(text, safe=‘~-._’)
def url_unescape(text):
return urllib.parse.unquote(text)
def url_format_params(params):
param_fragments =
for param in sorted(params.items(), key=lambda x: x[0]):
param_fragments.append(‘%s=%s’ % (param[0], url_escape(param[1])))
return ‘&’.join(param_fragments)
def call_refresh_token(client_id, client_secret, refresh_token):
params = {}
params[‘client_id’] = client_id
params[‘client_secret’] = client_secret
params[‘refresh_token’] = refresh_token
params[‘grant_type’] = ‘refresh_token’
request_url = command_to_url(‘o/oauth2/token’)
response = urllib.request.urlopen(request_url, urllib.parse.urlencode(params).encode(‘UTF-8’)).read().decode(‘UTF-8’)
return json.loads(response)
def generate_oauth2_string(username, access_token, as_base64=False):
auth_string = ‘user=%s\1auth=Bearer %s\1\1’ % (username, access_token)
if as_base64:
auth_string = base64.b64encode(auth_string.encode(‘ascii’)).decode(‘ascii’)
return auth_string
def refresh_authorization(google_client_id, google_client_secret, refresh_token):
response = call_refresh_token(google_client_id, google_client_secret, refresh_token)
return response[‘access_token’], response[‘expires_in’]
def send_mail(fromaddr, toaddr, subject, message):
access_token, expires_in = refresh_authorization(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN)
auth_string = generate_oauth2_string(fromaddr, access_token, as_base64=True)
msg = MIMEMultipart('related')
msg['Subject'] = subject
msg['From'] = fromaddr
msg['To'] = toaddr
msg.preamble = 'This is a multi-part message in MIME format.'
msg_alternative = MIMEMultipart('alternative')
msg.attach(msg_alternative)
part_text = MIMEText(lxml.html.fromstring(message).text_content().encode('utf-8'), 'plain', _charset='utf-8')
part_html = MIMEText(message.encode('utf-8'), 'html', _charset='utf-8')
msg_alternative.attach(part_text)
msg_alternative.attach(part_html)
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo(GOOGLE_CLIENT_ID)
server.starttls()
server.docmd('AUTH', 'XOAUTH2 ' + auth_string)
server.sendmail(fromaddr, toaddr, msg.as_string())
server.quit()
if name == ‘main’:
if GOOGLE_REFRESH_TOKEN is None:
print(‘No refresh token found, obtaining one’)
refresh_token, access_token, expires_in = get_authorization(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET)
print(‘Set the following as your GOOGLE_REFRESH_TOKEN:’, refresh_token)
exit()
send_mail('****@***.in', '****@***.in', 'A mail from you from Python', '<bA mail from you from Python</b<br<br' + 'So happy to hear from you!')
Blockquote
but i am not able to achieve how to do in erpnext. Please help me with your valuable suggestion