Python发送带附件的邮件
看别人的博客就不要在往别人的邮箱里发东西了行不行, 有点素质可以吗!!! 写出来分享还不知道珍惜!!!!!
#-*-encoding:utf-8 -*-
import os
import smtplib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr
mail_host="smtp.163.com"#使用的邮箱的smtp服务器地址,这里是163的smtp地址
mail_user=raw_input("你的163邮箱: ")#发送方邮箱
mail_pass=raw_input("邮箱授权码: ") #授权码
mail_postfix="163.com"#邮箱的后缀,网易就是163.com
mail_from = raw_input("来自: ") #发送方昵称
mail_sub = raw_input("邮件主题: ") #邮件主题
mail_content = raw_input("邮件主体内容: ")
me=mail_from+"<"+mail_user+">"
msg_attach = MIMEMultipart()
msg_attach['Subject'] = mail_sub
msg_attach['From'] = me
to_list = map(None,raw_input("mail_to: ").split(" "))#可以群发
msg_attach['To'] = ",".join(to_list)#将收件人列表以‘,’分隔
# 邮件正文是MIMEText(content,'plain','utf-8')
msg_attach.attach(MIMEText(mail_content,'plain','utf-8'))
#print "---1---",os.getcwd() #打印出当前工作目录
#pic_source = '/home/xushukui/图片/123.jpg'
#输入图片的目录的时候千万不要带引号,不然会报错, 图片名字之间不能有间隔(比如空格), 不然切割的时候会报错
pic_source = raw_input("请输入图片的目录,千万不要带引号, 不然会报错: ")
#先对pic_source进行切割, pwd是列表, 然后用"/".join(pwd) 把列表里面的内容连起来, 则cwd即为图片的目录, 然后进行目录切换,但是图片名字是中文接收的时候乱码问题还没解决, 已经解决的网友可以在博客下面告诉我一下方法吗,十分感谢
pwd = pic_source.split("/")[:-1]
cwd = "/".join(pwd)
os.chdir(cwd)
#print "---2---",os.getcwd()
pic_name = pic_source.split('/')[-1] #图片名
pic_suffix = pic_name.split('.')[-1] #图片后缀
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open(pic_source, 'rb') as f:
# 设置附件的MIME和文件名,这里是gif类型:
mime = MIMEBase('image', pic_suffix, filename=pic_name)
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename=pic_name)
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg_attach.attach(mime)
def main():
try:
server = smtplib.SMTP()
server.connect(mail_host)#连接服务器
server.login(mail_user,mail_pass)#登录操作
server.sendmail(me, to_list, msg_attach.as_string())
server.close()
return True
except Exception, e:#捕捉异常,并将异常对象输出
print str(e)
return False
if main():
print "done!"
else:
print "failed!"
本文转自:http://blog.csdn.net/zm2714/article/details/7993732
可采用email模块发送电子邮件附件。发送一个未知MIME类型的文件附件其基本思路如下:
构造MIMEMultipart对象做为根容器
构造MIMEText对象做为邮件显示内容并附加到根容器
构造MIMEBase对象做为文件附件内容并附加到根容器
a. 读入文件内容并格式化
b. 设置附件头
设置根容器属性
得到格式化后的完整文本
用smtp发送邮件
# -*- coding: utf-8 -*-
import smtplib
import os.path
import mimetypes
import email.MIMEText
import email.MIMEBase
import email.MIMEImage
import email.MIMEMultipart
From = "你的163邮箱"
To = "你的qq邮箱"
file_name = "/home/xushukui/xsk/xsk123.png.jpeg"#附件名
server = smtplib.SMTP("smtp.163.com")
server.login("你的163邮箱","xxxx") #仅smtp服务器需要验证时(账号,密码)
# 构造MIMEMultipart对象做为根容器
main_msg = email.MIMEMultipart.MIMEMultipart()
# 构造MIMEText对象做为邮件显示内容并附加到根容器
text_msg = email.MIMEText.MIMEText("this is a test text to text mime",_charset="utf-8")
main_msg.attach(text_msg)
# 构造MIMEBase对象做为文件附件内容并附加到根容器
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
ctype='application/octet-stream'
maintype,subtype = ctype.split('/',1)#分割返回两个值
#print maintype,subtype (可以输出看看)
file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype)
print ctype,encoding #火狐会将jpg、jpeg翻译成image/jpeg,png翻译成image/png
## 设置附件头
basename = os.path.basename(file_name)#os.path.basename(path) #返回文件名
#Content-disposition就是当用户想把请求所得内容存为一个文件的提供一个默认的文件名
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
main_msg.attach(file_msg)
# 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = "attach test "
main_msg['Date'] = email.Utils.formatdate( )
# 得到格式化后的完整文本
fullText = main_msg.as_string( )
# 用smtp发送邮件
try:
server.sendmail(From, To, fullText)
finally:
server.quit()
#application/octet-stream
#1.只能提交二进制,而且只能提交一个二进制,
#如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)
#2.属于HTTP规范中Content-Type的一种
#3.很少使用
第二种方法
#!usr/bin/python
#-*- coding:utf-8 -*-
import smtplib
import os.path
import mimetypes
import email.MIMEText
import email.MIMEBase
import email.MIMEImage
import email.MIMEMultipart
mailer_name=raw_input("name: ")
From = raw_input("163 mail address: ")
password = raw_input("password: ")
to_list = map(None,raw_input("to: ").split(" "))
file_name = "/home/xushukui/图片/nonexistent.jpg"
server = smtplib.SMTP("smtp.163.com")
server.login(From,password)
main_msg = email.MIMEMultipart.MIMEMultipart()
text_msg = email.MIMEText.MIMEText("不存在的",_charset = "utf-8")
main_msg.attach(text_msg)
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
ctype='application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg = email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype)
#print ctype,encoding
basename=os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment',filename=basename)
main_msg.attach(file_msg)
main_msg['From']= mailer_name+"<"+From+">"
main_msg['To'] = ",".join(to_list)
main_msg['Subject'] = "附带一张图片"
main_msg['Date'] = email.Utils.formatdate()
fullText = main_msg.as_string()
try:
server.sendmail(From , to_list,fullText)
print "done!"
finally:
server.quit()
#运行结果:
Python发送带附件的邮件的更多相关文章
- python 发送带附件的邮件
特别注意的地方:filespart.add_header("Content-Disposition","attachment",filename=file_na ...
- python 发送带附件的 邮件
from email.MIMETextimportMIMETextfrom email.MIMEMultipartimportMIMEMultipartimport smtplib mail_host ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- C#发送带附件的邮件的代码
如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...
- [SpringBoot] - 发送带附件的邮件
<!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...
- 接口测试基础——第2篇smtplib发送带附件的邮件
我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...
- 使用JavaMail发送带附件的邮件
所需jar包 链接:http://pan.baidu.com/s/1dFo4cDz 密码:akap 工具类: package com.javamail.utils; import java.util. ...
- spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...
随机推荐
- Linux基础操作-分区概念
开启Linux系统前添加一块大小为20G的SCSI硬盘 开启系统,右击桌面,打开终端 为新加的硬盘分区,一个主分区大小为10G,剩余空间给扩展分区,在扩展分区上划分两个逻辑分区,大小各5G 进入分区工 ...
- python——脚本和print
脚本和print 1.脚本文件 <Python 基础教程>(第二版)中 P118页,原操作为下: 1 _metaclass_ = type 2 3 class Person: 4 def ...
- SpringMVC控制器 跳转到jsp页面 css img js等文件不起作用 不显示
今天在SpringMVC转发页面的时候发现跳转页面确实成功,但是JS,CSS等静态资源不起作用: 控制层代码: /** * 转发到查看培养方案详情的页面 * @return */ @RequestMa ...
- vi 编辑器使用技巧
1.由命令"vi --version"所显示的内容知vi的全局配置文件 2.显示行号 ,非编辑模式输入 : set nu 3.显示颜色 1)在文件中找到 "synta ...
- csv导入mysql提示错误[Error Code] 1290 - The MySQL server is running with the --secure-file-priv option 解决方法【转】
解决方法: 1.进入mysql查看secure_file_prive的值 mysql>SHOW VARIABLES LIKE "secure_file_priv"; secu ...
- textarea保留换行和空格
<style> pre {white-space: pre-wrap;} </style> //替换textare <pre class="feedback_q ...
- 【C语言学习笔记】字符串拼接的3种方法 .
昨天晚上和@buptpatriot讨论函数返回指针(malloc生成的)的问题,提到字符串拼接,做个总结. #include<stdio.h> #include<stdlib.h&g ...
- 【Android开发】之Fragment开发1
一直知道Fragment很强大,但是一直都没有去学习,现在有些空闲的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,如果有什么不足的地方希望大牛指正,共同进步! 一. ...
- Python基础(1):dir(),help()
Python:3.6.4 开始编写Python程序了...可是,某个模块怎么用呢?模块里的函数怎么用呢?...使用本文介绍的dir().help()两个帮助函数可以 获得绝大部分开发所需要的信息! d ...
- 关于 JVM 内存的 N 个问题(转)
JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程:有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础 ...