LINUX.ORG.RU

отправка сообщения на почту Python

 ,


0

2

вот что сделал :

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

fromaddr = "гмайл@gmail.com"
toaddr = "кому отправляем"
mypass = "пароль"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Привет"
body = "тест"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, mypass)
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
код работает,но как отправить сообщение на несколько адресов ,например на два ?кто подскажет ?


Ответ на: Спасибо) от echo_

учти, что такие письма могут восприниматься как спам. рассылай по одному на каждого.

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

вот и начались траблы )

все работало , но потребовалось изменить код ,теперь все так :

mail_from = 'f'  # отправитель
          mail_to = 'f '  # получатель
          mail_text = message  # текст письма
          mail_subj = type  # заголовок письма
          mail_coding = 'utf-8'
          attach_file = 'log.txt'  # прикрепляемый файл

          # Параметры SMTP-сервера
          smtp_server = "smtp.gmail.com"
          smtp_port = 587
          smtp_user = "u"  # пользователь smtp
          smtp_pwd = "p"  # пароль smtp

          # формирование сообщения
          multi_msg = MIMEMultipart()
          multi_msg['From'] = Header(mail_from, mail_coding)
          multi_msg['To'] = Header(mail_to, mail_coding)
          multi_msg['Subject'] = Header(mail_subj, mail_coding)
          multi_msg["Cc"] = "сюда не отправляет"
          msg = MIMEText(mail_text.encode('utf-8'), 'plain', mail_coding)
          msg.set_charset(mail_coding)
          multi_msg.attach(msg)

          # присоединяем атач-файл
          if (os.path.exists(attach_file) and os.path.isfile(attach_file)):
              file = open(attach_file, 'rb')
              attachment = MIMEBase('application', "octet-stream")
              attachment.set_payload(file.read())
              email.encoders.encode_base64(attachment)
              file.close()
              only_name_attach = Header(os.path.basename(attach_file), mail_coding);
              attachment.add_header('Content-Disposition', 'attachment; filename="%s"' % only_name_attach)
              multi_msg.attach(attachment)
          else:
              if (attach_file.lstrip() != ""):
                  print("Файл для атача не найден - " + attach_file)

          # отправка
          smtp = smtplib.SMTP(smtp_server, smtp_port)
          smtp.ehlo()
          smtp.starttls()
          smtp.ehlo()
          smtp.login(smtp_user, smtp_pwd)
          smtp.sendmail(mail_from, mail_to, multi_msg.as_string())
          smtp.quit()
тут чет этим методы не работают,походу пока знаний не хватает ...что тут изменить нужно что бы оно отправило сообщения на 3 ящика ?буду очень благодарен ...

echo_
() автор топика
Ответ на: вот и начались траблы ) от echo_

Возьми мой рабочий код

# -*- encoding: utf-8 -*-

'''
Created on Feb 25, 2017
@author: bvn13
'''

from argparse import ArgumentError
from os.path import basename
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.message import EmailMessage
from email.headerregistry import Address
from email.mime.text import MIMEText
import logging
import smtplib
import sys


from email.utils import formataddr
from email.utils import formatdate
from email.utils import COMMASPACE

from email.header import Header
from email import encoders

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


from base64 import b64decode

from urllib.parse import quote


from MailSender.Server.TracebackLogger import TracebackLogger


#from email.MIMEMultipart import MIMEMultipart
#from email.MIMEText import MIMEText
#from email.MIMEBase import MIMEBase
logger = logging.getLogger()

class Mail(object):
    '''
    Class for sending mail
    '''
    
    def readInitParam(self, paramName, **settings):
        if (not paramName in settings) :
            errorText = 'Mailing.Init: %s was not specified' % paramName
            logger.error(errorText)
            raise ArgumentError(errorText)
        self.settings[paramName] = settings[paramName]
    
    
    def __init__(self, settings):
        self.settings = settings
        

    def sendEmail(self, sender_email, sender_name, to_addr, to_name, subj, text, files=[]) :
        server = None
        if ("USE_SSL" in self.settings and self.settings["USE_SSL"]) :
            server = smtplib.SMTP_SSL('%s:%s' % (self.settings['SMTP'], self.settings['PORT']))
        else :
            server = smtplib.SMTP('%s:%s' % (self.settings['SMTP'], self.settings['PORT']))
        server.set_debuglevel(2)
        if (self.settings['WITH_AUTH']) :
            server.login(self.settings['LOGIN'], self.settings['PASSWORD'])

        logger.debug("MAIL = from: %s <%s>, To: %s <%s>" % (sender_name, sender_email, to_name, to_addr))


        sender_name = Header(sender_name, 'utf-8').encode()
        msg_root = MIMEMultipart('mixed')
        msg_root['Date'] = formatdate(localtime=1)
        msg_root['From'] = formataddr((sender_name, sender_email)) if (sender_email.strip() != '') else formataddr(('mail2send.tk service', self.settings['EMAIL']))
        msg_root['To'] = formataddr((to_name, to_addr))
        msg_root['Subject'] = Header(subj, 'utf-8')

        msg_related = MIMEMultipart('related')
        msg_root.attach(msg_related)

        msg_alternative = MIMEMultipart('alternative')
        msg_related.attach(msg_alternative)

        # msg_text = MIMEText(text.encode('utf-8'), 'plain', 'utf-8')
        # msg_alternative.attach(msg_text)

        msg_html = MIMEText(text.encode('utf-8'), 'html', 'utf-8')
        msg_alternative.attach(msg_html)

        for file in files or []:
            fname = file['name']

            with open(file['filename'], 'rb') as f:
                msg_attach = MIMEBase('application', 'octet-stream')
                msg_attach.set_payload(f.read())
                encoders.encode_base64(msg_attach)
                msg_attach.add_header('Content-Disposition', 'attachment', filename=(Header(fname, 'utf-8').encode()))
                msg_root.attach(msg_attach)

        try:
            res = server.send_message(msg_root, from_addr=self.settings['SENDER_EMAIL'], to_addrs=to_addr)
            server.quit()
        except smtplib.SMTPException :
            logger.error("Error sending email: %s" % sys.exc_info()[1])
            logger.error("Traceback: \n%s" % TracebackLogger.getTraceback())
            return False, sys.exc_info()[1],

        return True, ''


    

bvn13 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.