Exemple #1
0
    def _email(self,
               wb,
               file_type,
               send_from: str,
               to: list,
               cc: list = None,
               subj: str = None,
               message: str = None,
               data_filters: dict = None,
               page_type=None,
               orientation=None):
        """

        :param data_filters:
        :param wb:
        :param send_from:
        :param subj:
        :param message:
        :param to:
        :param cc:
        """
        with tempfile.TemporaryDirectory() as tmpdirname:
            assert isinstance(to, list), "to is not list!"
            assert isinstance(cc, list), "cc is not list!"
            if not subj:
                subj = wb.name
            if not message:
                message = "Attached you can find %s " % wb.name

            msg = MIMEMultipart()
            msg['From'] = send_from
            msg['To'] = COMMASPACE.join(to)
            _m_to = to
            if cc:
                msg['Cc'] = COMMASPACE.join(cc)
                _m_to = _m_to + cc
            msg['Date'] = formatdate(localtime=True)
            msg['Subject'] = subj

            msg.attach(MIMEText(message))

            wb_file = self.tableau.download_workbook(file_type=file_type,
                                                     workbook=wb,
                                                     dest_dir=tmpdirname,
                                                     data_filters=data_filters,
                                                     page_type=page_type,
                                                     orientation=orientation)
            with open(wb_file, "rb") as myfile:
                part = MIMEApplication(myfile.read(), Name=basename(wb_file))
            # After the file is closed
            part[
                'Content-Disposition'] = 'attachment; filename="%s"' % basename(
                    wb_file)

            msg.attach(part)
            self.smtp_server.send_message(from_addr=self.smtp_server.user,
                                          to_addrs=_m_to,
                                          msg=msg)
            log.info("Sent Email subj:'%s' to: %s cc: %s" %
                     (subj, COMMASPACE.join(_m_to), COMMASPACE.join(cc)))
Exemple #2
0
    def _send_reports(self,
                      send_from,
                      schedule=None,
                      email_subject=None,
                      email_message=None,
                      data_filters: dict = None):

        log.info('Sending Reports With tag: %s:to:[email protected] ' % schedule)

        for wb in self.get_scheduled_workbooks():
            subj, to, cc = self._get_email_params(wb, schedule)
            if email_subject:
                subj = email_subject

            message = "Attached Report %s" % wb.name
            if email_message:
                message = email_message

            if to:
                log.info("Sending Workbook '%s' to: %s cc: %s" %
                         (wb.name, COMMASPACE.join(to), COMMASPACE.join(cc)))
                self._email(wb,
                            send_from=send_from,
                            subj=subj,
                            message=message,
                            to=to,
                            cc=cc,
                            data_filters=data_filters,
                            file_type='pdf')
Exemple #3
0
def sendmail(email, password, message='', files=None):
    msg = MIMEMultipart()
    msg['From'] = email
    msg['To'] = COMMASPACE.join([email])
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = 'PyWeasel - ' + msg['Date']

    msg.attach(MIMEText(message))

    for f in files or []:
        with open(f, "rb") as fil:
            part = MIMEApplication(
                fil.read(),
                Name=os.path.basename(f)
            )
        # After the file is closed
        part['Content-Disposition'] = 'attachment; filename="%s"' % os.path.basename(f)
        msg.attach(part)

    # manages a connection to an SMTP server
    smtp = smtplib.SMTP(host="smtp.gmail.com", port=587)
    # connect to the SMTP server as TLS mode ( for security )
    smtp.starttls()
    # login to the email account
    smtp.login(email, password)
    # send the actual message
    smtp.sendmail(email, [email], msg.as_string())
    # terminates the session
    smtp.close()
Exemple #4
0
 def init_message(self, msg_type: str = ''):
     msg = MIMEMultipart()
     msg['From'] = self.from_email
     msg['To'] = COMMASPACE.join(self.to)
     msg['Date'] = formatdate(localtime=True)
     msg['Subject'] = self.subject
     if msg_type == 'HTML':
         msg_body = MIMEText(self.body, "HTML", 'utf-8')
     else:
         msg_body = MIMEText(self.body)
     msg.attach(msg_body)
     return msg
Exemple #5
0
def send_mail(sub, content, send_mail_list):
    try:
        mail_obj = smtplib.SMTP(SMPT_HOST, SMPT_PORT)
        mail_obj.docmd(DOCMD, MAIL_ACCOUNT)
        mail_obj.starttls()
        mail_obj.login(MAIL_ACCOUNT, PASSWD)
        msg = MIMEMultipart()
        msg['From'] = MAIL_FROM
        msg['To'] = COMMASPACE.join(send_mail_list)
        msg['Subject'] = sub
        con = MIMEText(content, 'html', 'utf-8')
        msg.attach(con)
        mail_obj.sendmail(MAIL_ACCOUNT, send_mail_list, msg.as_string())
        mail_obj.quit()
    except:
        traceback.print_exc()
Exemple #6
0
def send_email(addr_to, msg_subj, text, files):
    addr_from = "*****@*****.**"  # Відправник
    password = "******"  # Пароль
    msg = MIMEMultipart()
    msg['From'] = addr_from
    if type(addr_to) == str:
        logger("email один")
        msg['To'] = addr_to
    else:
        logger("поштових скриньок декілька")
        assert isinstance(addr_to, set)
        msg['To'] = COMMASPACE.join(addr_to)
    num_files = len([
        f for f in os.listdir(files[0])
        if os.path.isfile(os.path.join(files[0], f))
    ])
    if int(num_files) == 0:
        logger("немає нових файлів в папці " + files[0])
    else:
        logger("додаю тему до повідомлення")
        msg['Subject'] = msg_subj
        logger("додаю текст до повідомлення")
        msg.attach(MIMEText(text, 'plain'))
        logger("додаю файли до повідомлення")
        process_attachement(msg, files)
        logger("з'єднуюсь з сервером")
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        logger("входжу в акаунт")
        server.login(addr_from, password)
        logger("відправляю повідомлення")
        server.send_message(msg)
        logger("виходжу з акаунта")
        server.quit()
        copy_and_delete(files)
        logger("повідомлення успішно відіслано")
Exemple #7
0
def send_mail(mail_server=default_server,
              mail_from=None,
              mail_subject=u'',
              mail_to=[],
              mail_content='',
              mail_content_images=None,
              mail_attachments=None):
    """
    发送电子邮件
    :param mail_server: 邮件服务器配置
    :param mail_subject: 邮件主题
    :param mail_from: 发送邮箱地址
    :param mail_to: 目标邮箱地址
    :param mail_content: 邮件内容
    :param mail_content_images: 邮件内容的图片附件 {'Content-ID':'image_path'}
    :param mail_attachments: 邮件附件
    :return:
    """
    try:
        if not mail_from:
            mail_from = default_server['user_name']
        else:
            mail_from += f" <{mail_server['user_name']}>"
        if not mail_to:
            mail_to = settings.mail_to
        mail_mime = MIMEMultipart()
        # 邮件信息
        mail_mime['From'] = mail_from
        mail_mime['To'] = COMMASPACE.join(mail_to)
        mail_mime['Subject'] = Header(mail_subject, 'utf-8')
        mail_mime['Date'] = formatdate(localtime=True)
        # 邮件内容
        html_content = MIMEText(mail_content, 'html', 'utf-8')
        mail_mime.attach(html_content)
        # 邮件内容图片
        if isinstance(mail_content_images, dict):
            for content_id in mail_content_images.keys():
                try:
                    image_path = mail_content_images.get(content_id)
                    if image_path:
                        image = open(image_path, 'rb')
                        image_mime = MIMEImage(image.read())
                        image_mime.add_header('Content-ID', content_id)
                        image.close()
                        mail_mime.attach(image_mime)
                except Exception:
                    pass
        # 邮件附件
        if isinstance(mail_attachments, list):
            for attachment in mail_attachments:
                try:
                    a_mime = MIMEBase('application', 'octet-stream')
                    a_file = open(attachment, 'rb')
                    a_mime.set_payload(open(a_file.read()))
                    # Base64加密成字符串
                    encoders.encode_base64(a_mime)
                    a_mime.add_header(
                        'Content-Disposition', 'attachment; filename="%s"' %
                        os.path.basename(attachment))
                    mail_mime.attach(a_mime)
                except Exception:
                    pass
        try:
            smtp = smtplib.SMTP_SSL(mail_server['host'])
            smtp.ehlo()
            smtp.login(mail_server['user_name'], mail_server['password'])
            smtp.sendmail(mail_from, mail_to, mail_mime.as_string())
        except Exception:
            print(traceback.format_exc())
        smtp.close()
    except Exception:
        print(traceback.format_exc())
Exemple #8
0
def send_instant_mail(mail_server: dict = None,
                      mail_from: str = None,
                      mail_to: list = None,
                      copy_to: list = None,
                      subject: str = '提醒邮件',
                      content: str = '',
                      content_images: dict = None,
                      attachments: list = None) -> int:
    """
    立即发送邮件
    :param mail_server: 邮件服务器
    :param mail_from: 发送邮箱
    :param mail_to: 接收邮箱
    :param copy_to:
    :param subject: 邮件主题
    :param content: 内容
    :param content_images: 附件图片资源
    :param attachments: 邮件附件
    :return:
    """
    if not mail_server:
        mail_server = {
            'HOST': '',
            'PORT': '',
            'MAIL_FROM': '',
            'USERNAME': '',
            'PASSWORD': ''
        }

    status = _check_mail_params(mail_server, mail_from, mail_to, subject,
                                content)
    if status == STATUS_MAIL_SEND_SUCCEED:
        mail_mime = MIMEMultipart()
        # 邮件信息
        mail_to = list(set(mail_to))
        mail_mime['From'] = mail_from
        mail_mime['To'] = COMMASPACE.join(mail_to)
        mail_mime['Cc'] = COMMASPACE.join(copy_to)
        mail_mime['Subject'] = Header(subject, 'utf-8')
        mail_mime['Date'] = formatdate(localtime=True)
        # 邮件内容
        html_content = MIMEText(content, 'html', 'utf-8')
        mail_mime.attach(html_content)
        # 邮件内容图片
        if isinstance(content_images, dict):
            for content_id, image_path in content_images.items():
                if image_path:
                    image = open(image_path, 'rb')
                    image_mime = MIMEImage(image.read())
                    image_mime.add_header('Content-ID', content_id)
                    image.close()
                    mail_mime.attach(image_mime)
        # 邮件附件
        if isinstance(attachments, list):
            for attachment in attachments:
                a_mime = MIMEBase('application', 'octet-stream')
                a_file = open(attachment, 'rb')
                a_mime.set_payload(a_file.read())
                # Base64加密成字符串
                encoders.encode_base64(a_mime)
                a_mime.add_header('Content-Disposition',
                                  'attachment',
                                  filename=("gbk", "",
                                            os.path.basename(attachment)))
                mail_mime.attach(a_mime)
        try:
            smtp = smtplib.SMTP_SSL(mail_server['HOST'])
            smtp.ehlo()
            smtp.login(mail_server['USERNAME'], mail_server['PASSWORD'])
            smtp.sendmail(mail_from, mail_to, mail_mime.as_string())
        except smtplib.SMTPHeloError:
            status = STATUS_MAIL_HELO_ERROR
        except smtplib.SMTPRecipientsRefused:
            status = STATUS_MAIL_REJECTED_ALL_ERROR
        except smtplib.SMTPSenderRefused:
            status = STATUS_MAIL_SENDER_REFUSED_ERROR
        except smtplib.SMTPDataError:
            status = STATUS_MAIL_UNEXPECTED_CODE_ERROR
        finally:
            smtp.close()
    return status
Exemple #9
0
def send_instant_mail(mail_server: dict = DEFAULT_SERVER,
                      mail_from: str = DEFAULT_SERVER['USERNAME'],
                      mail_to: list = None,
                      copy_to: list = [],
                      subject: str = '提醒邮件',
                      content: str = '',
                      content_images: dict = None,
                      attachments: list = None) -> int:
    """
    立即发送邮件
    :param mail_server: 邮件服务器
    :param mail_from: 发送邮箱
    :param mail_to: 接收邮箱
    :param subject: 邮件主题
    :param content: 内容
    :param content_images: 附件图片资源
    :param attachments: 邮件附件
    :return:
    """
    status = _check_mail_params(mail_server, mail_from, mail_to, subject,
                                content)
    exception = None
    if status == STATUS_MAIL_SEND_SUCCEED:
        try:
            mail_mime = MIMEMultipart()
            # 邮件信息
            mail_to = list(set(mail_to))
            mail_mime['From'] = mail_from
            mail_mime['To'] = COMMASPACE.join(mail_to)
            mail_mime['Cc'] = COMMASPACE.join(copy_to)
            mail_mime['Subject'] = Header(subject, 'utf-8')
            mail_mime['Date'] = formatdate(localtime=True)
            # 邮件内容
            html_content = MIMEText(content, 'html', 'utf-8')
            mail_mime.attach(html_content)
            # 邮件内容图片
            if isinstance(content_images, dict):
                for content_id, image_path in content_images.items():
                    if image_path:
                        image = open(image_path, 'rb')
                        image_mime = MIMEImage(image.read())
                        image_mime.add_header('Content-ID', content_id)
                        image.close()
                        mail_mime.attach(image_mime)
            # 邮件附件
            if isinstance(attachments, list):
                for attachment in attachments:
                    a_mime = MIMEBase('application', 'octet-stream')
                    a_file = open(attachment, 'rb')
                    a_mime.set_payload(a_file.read())
                    # Base64加密成字符串
                    encoders.encode_base64(a_mime)
                    a_mime.add_header('Content-Disposition',
                                      'attachment',
                                      filename=("gbk", "",
                                                os.path.basename(attachment)))
                    mail_mime.attach(a_mime)
            try:
                smtp = smtplib.SMTP_SSL(mail_server['HOST'])
                smtp.ehlo()
                smtp.login(mail_server['USERNAME'], mail_server['PASSWORD'])
                smtp.sendmail(mail_from, mail_to, mail_mime.as_string())
            except smtplib.SMTPHeloError as she:
                status = STATUS_MAIL_HELO_ERROR
                raise she
            except smtplib.SMTPRecipientsRefused as srr:
                status = STATUS_MAIL_REJECTED_ALL_ERROR
                raise srr
            except smtplib.SMTPSenderRefused as ssr:
                status = STATUS_MAIL_SENDER_REFUSED_ERROR
                raise ssr
            except smtplib.SMTPDataError as sde:
                status = STATUS_MAIL_UNEXPECTED_CODE_ERROR
                raise sde
            smtp.close()
        except Exception:
            status = STATUS_MAIL_SEND_FAILED
            exception = traceback.format_exc()
        # 存储邮件历史
        try:
            instant_mail = InstantMail(mail_server=mail_server,
                                       mail_from=mail_from,
                                       mail_to=mail_to,
                                       status=status,
                                       subject=subject,
                                       content=content,
                                       exception=exception)
            if content_images:
                instant_mail.content_images = content_images
            if attachments:
                instant_mail.attachments = attachments
            instant_mail.exception = exception
            instant_mail.sync_save()
        except Exception:
            pass
    return status