代码:

 1 # -*- coding: utf-8 -*-
2
3 import smtplib, ssl
4 from email.mime.text import MIMEText
5 from email.mime.multipart import MIMEMultipart
6
7
8 def send_email_with_custom_smtp(sender_email, receiver_email, server, port, usr, password, subject, text, html,
9 annex_path):
10 # mail gun exception, switch to port 465
11 # see: https://stackoverflow.com/questions/57715289/how-to-fix-ssl-sslerror-ssl-wrong-version-number-wrong-version-number-ssl
12 if server == 'smtp.mailgun.org':
13 port = 465
14
15 message = MIMEMultipart("alternative")
16 if annex_path is not None:
17 for k in annex_path:
18 attach = MIMEText(k['annexContent'], 'base64', 'utf-8')
19 attach["Content-Type"] = 'application/octet-stream'
20 attach.add_header('Content-Disposition', 'attachment', filename='{}'.format(k['annexName']))
21 message.attach(attach)
22 else:
23 pass
24 message["Subject"] = subject
25 message["From"] = sender_email
26 message["To"] = receiver_email
27
28 # Turn these into plain/html MIMEText objects
29 part1 = MIMEText(text, "plain")
30 part2 = MIMEText(html, "html")
31
32 # Add HTML/plain-text parts to MIMEMultipart message
33 # The email client will try to render the last part first
34 message.attach(part1)
35 message.attach(part2)
36
37
38 # Create a secure SSL context
39 context = ssl.create_default_context()
40 with smtplib.SMTP_SSL(server, port, context=context) as server:
41 if int(port) == 587:
42 server.starttls(context=context)
43 try:
44 server.login(usr, password)
45 except:
46 raise ValueError('登录失败,请检查邮箱用户名与密码(授权码)是否正确')
47 try:
48 server.sendmail(
49 sender_email, receiver_email, message.as_string()
50 )
51 return '邮件发送成功。', True
52 except:
53 return '邮件发送失败', False

python3.7发送邮件带附件的更多相关文章

  1. Java发送邮件(带附件)

    实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...

  2. centos 使用mutt发送邮件带附件

    1.安装mutt工具 yum install -y mutt 2.使用mutt发邮件并带附件echo "统计日志" | /usr/bin/mutt -s "统计日志&qu ...

  3. 使用System.Net.Mail中的SMTP发送邮件(带附件)

    System.Net.Mail 使用简单邮件传输协议SMTP异步发送邮件 想要实现SMTP发送邮件,你需要了解这些类 SmtpClient :使用配置文件设置来初始化 SmtpClient类的新实例. ...

  4. python 发送邮件 带附件

    # coding:utf-8 # __author__ = 'Mark sinoberg' # __date__ = '2016/5/26' # __Desc__ = 实现发送带有各种附件类型的邮件 ...

  5. java发送邮件带附件

    package com.smtp; import java.util.Vector; public class MailBean { private String to; // 收件人 private ...

  6. Python发送邮件(带附件的)

    有时候做自动化测试任务,任务完成后,需要将结果自动发送一封邮件,这里用到smtplib模块,直接导入就行,这里以163邮箱为例,需要用到授权码,我用类写一下: 如果是发送qq邮箱,要将smtp 改成s ...

  7. VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)

      之前写过一篇博文,通过MAPI实现调用邮箱客户端发送邮件带附件,当时对ShellExecute研究不深,以为ShellExecute不能带附件,因为项目需求原因(MAPI只能调用Foxmail和O ...

  8. php中PHPMailer发送带附件的电子邮件方法

    摘要: 本文讲的是php中PHPMailer发送带附件的电子邮件方法, .首先到http://phpmailer.worxware.com/ 下载最新版本的程序包 2.下载完成后,找到class.ph ...

  9. Java 阿里云 邮件(带附件)发送

    简单的使用. 阿里云每天免费200封 1000封才2块钱..465端口 使用正常25 端口 不正常 package com.gwzx.framework.utils; import java.util ...

随机推荐

  1. JavaWeb学习笔记(五)

    本文内容 1. JSP: 1. 指令 2. 注释 3. 内置对象 2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令 * 作用:用于配置JSP页面,导入资 ...

  2. COM笔记-包容与聚合

    COM不支持实现继承的原因在于这种继承方式将使得一个对象的实现同另外一个对象的实现紧紧地关联起来.在这种情况下,当基类的实现被修改后,派生类将无法正常运行而必须被修改.这就是为什么一些用C++编写大型 ...

  3. java输入字符

    1.创建一个Scanner对象. 2.调用.next()返回一个String类型用一个变量接受. 3.调用该String变量的.charAt(0),获取第一个字符. Scanner scn=new S ...

  4. Map 综述(二):彻头彻尾理解 LinkedHashMap

    摘要: HashMap和双向链表合二为一即是LinkedHashMap.所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的Hash ...

  5. jQuery中的表单对象属性过滤选择器(四、八)::enabled、:disabled、:checked、:selected

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. jsp中核心标签使用

    <%@ page language="java" import="java.util.*, java.lang.*" pageEncoding=" ...

  7. 常见面试题:java8有什么新特性?

    常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有效减少代码量 Runnable 是一个函数式接口,下面展示了创建线程三种写法,显然最后 ...

  8. MySQL高可用主从复制简介

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 简介 1.1 概述 二 技术原理 2.1 支持的复制类型 2.2 技术特点 2 ...

  9. C++之常指针,指针常量,函数指针,const用法总结

    1.const char *p,char const *p,char * const p 对于C++而言,没有const * 修饰符,所以,const只可以修饰类型或者变量名.因而const char ...

  10. go语言文件系统

    检测文件是否存在 //存在返回 true,不存在返回 false func fileIfExist(filename string) bool { _, err := os.Stat(filename ...