我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python编写的Linux邮件发送工具

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python编写的Linux邮件发送工具

之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的python2.6.6和自带的邮件相关的库写了个小工具,使用步骤如下:

一、申请一个163邮箱,作为发件箱。

不用qq邮箱是因为,qq邮箱的SMTP服务器需要独立的密码,比较麻烦一点。

二、创建如下脚本,改名为SendMail.py:

注意将以下脚本中的from_addr和password改为你自己的163邮箱和密码即可。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import os,sys
import smtplib
import getopt

#使用帮助
def usage():
    print('''Usage: 
    SendMail.py [Options]
    eg. SendMail.py -s "邮件标题" -c "邮件正文" -d "xxx@xxx.com,yyy@yyy.com" --content-file mail_content.txt --attach attachment.log
Options:
    -h/--help 显示此帮助
    -s 邮件标题,例如: -s "这里是邮件标题"
    -c 邮件正文,例如: -c "这里是邮件正文"
    -d 邮件接收地址,例如: -d "xxx@xxx.com,yyy@yyy.com"
    --content-file 包含邮件正文的文件,例如: --content-file mail_content.txt
    --attach 附件,可以是绝对或相对路径,例如: --attach attachment.log 或者 --attach /var/log/attachment.log
    Ps:目前此脚本只支持一个附件,暂无发送多个附件的需求
''')

#参数解析
def argParse():
    subject,content,destAddr,content_file,attachment=None,None,None,None,None
    '''
    如果参数很多,可以选择用argparse模块,getopt模块只适用于轻量级的工具。
    getopt(args, shortopts, longopts = [])
    shortopts表示短项参数,longopts表示长项参数,前者使用'-'后者使用'--',需要后接具体参数的短项参数后需要加冒号':'标识,longopts则必须以=结尾,赋值时写不写等号无所谓因为默认是模糊匹配的。
    getopt的返回值分两部分,第一部分是所有配置项和其值的list,类似[(opt1,val1),(opt2,val2),...],第二部分是未知的多余参数,我们只需要在第一部分的list取参数即可。
    第二部分一般无需关注,因为我们会使用getopt.GetoptError直接过滤掉这些参数(即直接报option xxx not recognized)。
    '''
    try:
        sopts, lopts = getopt.getopt(sys.argv[1:],"hs:c:d:",["help","content-file=","attach="])
    except getopt.GetoptError as e:
	    print("GetoptError:")
	    print(e)
        sys.exit(-1)
    for opt,arg in sopts:
	    if opt == '-s':
	        subject=arg
	    elif opt == '-c':
	        content=arg
	    elif opt == '-d':
	        destAddr=arg
	    elif opt == '--attach':
	        attachment=arg
	    elif opt == '--content-file':
	        content_file=arg
	    elif opt == '--attach':
	        attachment=arg
	    else:
	        usage()
	        sys.exit(-1)
    #subject,destAddr必须不能为空
    if not subject or not destAddr:
	    usage()
	    print("Error: subject and destination must not be null!")
	    sys.exit(-1)
    #处理正文文件,如果存在正文文件,那么忽略-c参数,以文件内容为邮件正文
    if content_file and os.path.exists(content_file):
	    try:
	        with open(content_file) as f1:
	            content=f1.read()
	    except:
	        print("Can't open or read the content file!")
	        exit(-1)
    else:
	    pass
    return {'s':subject,'c':content,'d':destAddr,'a':attachment,}

#发送邮件
def main():	
    opts=argParse()
    subject,content,dest,attach=opts['s'],opts['c'],opts['d'],opts['a']
    #通用第三方smtp服务器账号密码
    smtp_server = 'smtp.163.com'
    from_addr = '你的163发件箱'
    password = '你的163发件箱密码'
    to_addr = list(dest.split(","))

    msg = MIMEMultipart()
    msg['From'] = from_addr
    msg['To'] = ','.join(to_addr)
    msg['Subject'] = subject
    msg.attach(MIMEText(content, 'plain', 'utf-8'))

    #处理附件
    if attach and os.path.exists(attach):
	    try:
	        with open(attach) as f2:
		        mime=f2.read()
		        #目前懒的再写多个附件了,因此只支持一个附件
		        attach1=MIMEApplication(mime)
		        attach1.add_header('Content-Disposition','attachment',filename=attach)
		        msg.attach(attach1)
	    except:
	        print("Can't open or read the attach file!")
	        exit(-1)
    else:
	    pass

    server = smtplib.SMTP_SSL(smtp_server, 465)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()

if __name__=='__main__':
    main()

 

三、更改权限后就可以在安装了python的服务器上发送邮件啦(一般服务器都自带python2版本)。

例如:

[root@python leo]# chmod 755 SendMail.py
[root@python leo]# ./SendMail.py -s "邮件标题" -c "邮件正文" -d "xxx@qq.com" --content-file mail.txt 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python编写的Linux邮件发送工具

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python编写的Linux邮件发送工具

之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的pyth
2023-01-31

delphi 7邮件发送程序编写

以下是一个简单的Delphi 7邮件发送程序的示例代码:```delphiusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialo
2023-09-28

Python调用工具包实现发送邮件服务

这篇文章主要为大家详细介绍了Python图画调用工具包实现发送邮件服务的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-05-20

java发送邮件的具体实现

这篇文章介绍了java发送邮件的具体实现,有需要的朋友可以参考一下
2022-11-15

Python发送邮件的例子

import smtplibfrom email.mime.text import MIMETextfrom email.header import Header # 第三方 SMTP 服务mail_host="smtp.qq.com"
2023-01-31

python发送带附件的邮件

来源:http://snipperize.todayclose.com/snippet/py/Send-email-with-p_w_upload--53762/Send email with p_w_uploadimport smtpli
2023-01-31

用JavaMail API编写可带附件的邮件发送程序(转)

利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的Ja
2023-06-03

JSP与JavaMail如何编写灵活的邮件发送程序

这篇文章给大家分享的是有关JSP与JavaMail如何编写灵活的邮件发送程序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。更改后的撰写界面程序如下:--------------------------------
2023-06-03

怎么用python批量发送工资条邮件

今天给大家介绍一下怎么用python批量发送工资条邮件。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。工资excel表格格式如下所示:使用python批量给每位
2023-06-29

python实现发送邮件的方法

这篇文章将为大家详细讲解有关python实现发送邮件的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.设置邮箱,如下图所示2.设置过程如下图所示:设置完成后,添加如下代码:# coding:utf-
2023-06-06

linux shell发送Email邮件的方法详解

一封最简单的邮件echo -e "To: handy1989@qq.comnCC: handy1989@qq.comnFrom: handynSubject: testnnhello world" | sen
2022-06-04

Python 发送SMTP邮件的简单教程

目录一、两个模块二、SMTP端口三、四大步骤1、构造邮件内容2、连接邮件服务器3、登陆邮件服务器4、发送邮件四、常用场景1、纯文本邮件2、发送html文本3、发送附件一、两个模块Python使用SMTP发送邮件的两个模块:smtplib模块
2022-06-02

Linux下发送邮件的方法有哪些

小编给大家分享一下Linux下发送邮件的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linux 命令行发送邮件的 5 种方法当你需要在 shell 脚
2023-06-25

如何用Python发送带有附件的邮件

如何用Python发送带有附件的邮件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python 发送带有附件的邮件条件使用from django.core.ma
2023-06-02

Python中有哪些发送邮件的方式

今天就跟大家聊聊有关 Python中有哪些发送邮件的方式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方式一:smtplibsmtplib是 Python 自带的依赖库,可以直接导入
2023-06-16

编程热搜

目录