Prashant
Prashant

Reputation: 704

send mail using python

Problem: when i send mail to user then from user name not seen in to user inbox only show email-id but i need user name of sender

from: [email protected] username: Demo

To: [email protected]

CODE

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

Upvotes: 1

Views: 1530

Answers (4)

Prashant
Prashant

Reputation: 704

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

fromaddr = '[email protected]'
toaddrs = '[email protected]'

msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = "good morning" #like name
msg['To'] = "GGGGGG"

body = MIMEText("example email body")
msg.attach(body)

username = '[email protected]'
password = ''
server = smtplib.SMTP_SSL('smtp.googlemail.com', 465)
server.login(username, password)
server.sendmail(fromaddr, toaddrs, msg.as_string())
server.quit()

Upvotes: 1

PascalVKooten
PascalVKooten

Reputation: 21433

Or go the easy way, by install yagmail and

Given:

To = '[email protected]'
From = '[email protected]'
pwd = '******'
alias = 'someone'

Run:

import yagmail
yag = yagmail.SMTP(From, pwd)
yag.send({To: alias}, 'subject', 'Why,Oh why!')

Install might be done by pip install yagmail

Upvotes: 0

Fomalhaut
Fomalhaut

Reputation: 9727

You just need to create the message correctly. I think the most convenient way to do it is using a special object for message. I placed a class which perhaps may help you to send messages in your project.

import os
import smtplib

from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart



class EmailSender(object):
    def __init__(self, subject, to, config):
        self.__subject = subject
        self.__to = tuple(to) if hasattr(to, '__iter__') else (to,)

        self.__from = config['user']
        self.__password = config['password']
        self.__server = config['server']
        self.__port = config['port']

        self.__message = MIMEMultipart()
        self.__message['Subject'] = self.__subject
        self.__message['From'] = self.__from
        self.__message['To'] = ', '.join(self.__to)


    def add_text(self, text):
        self.__message.attach(
            MIMEText(text)
        )


    def add_image(self, img_path, name=None):
        if name is None:
            name = os.path.basename(img_path)

        with open(img_path, 'rb') as f:
            img_data = f.read()
            image = MIMEImage(img_data, name=name)
            self.__message.attach(image)


    def send(self):
        server = smtplib.SMTP_SSL(self.__server, self.__port)
        server.login(self.__from, self.__password)
        server.sendmail(self.__from, self.__to, self.__message.as_string())
        server.close()



sender = EmailSender("My letter", "my_target@email", {
    'user': "from@email",
    'password': "123456",
    'server': "mail.google.com"
    'port': 465
})
sender.add_text("Why,Oh why!")
sender.send()

Upvotes: 0

arodriguezdonaire
arodriguezdonaire

Reputation: 5562

smtplib does not include automatically any header, and you need to include a From: header, so you have to put one by yourself doing something like:

# Add the From: and To: headers at the start!
msg = ("From: %s\r\nTo: %s\r\n\r\n"
       % (fromaddr, ", ".join(toaddrs)))

As you can se in the DOCS.

Upvotes: 2

Related Questions