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)))
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')
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()
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
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()
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("повідомлення успішно відіслано")
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())
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
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