Linux使用mail配合smtp发送邮件

由于工作需要结合shell脚本需要发送邮件通知,linux自带的mail可以实现外部smtp发邮件。不需要本地配置postfix,sendmail邮件服务器。

本文教程包含25端口发送邮件和mail使用465端口加密发邮件,mail基本命令发送邮件三个知识点,测试系统是centos7

Linux-mail-smtp

安装工具

#  yum -y install mailx
#  yum -y install sendmail

centos6
# /etc/init.d/sendmail start
# chkconfig sendmail on

centos7
systemctl enable sendmail

关闭其他的邮件工具

# systemctl stop sendmail
# systemctl stop postfix

开启邮箱imap/smtp服务

我这里使用的是163的邮箱,步骤如下:

1.登录邮箱后,点击页面顶部的“设置”菜单,在下拉框中点击“POP3/SMTP/IMAP”项

clipboard.png

2.进入到如下页面,勾选IMAP/SMTP服务项,根据步骤完成即可(由于我这里已经开启过,就不再演示了。初始勾选后会让你填写手机号码,发送验证码,成功填写后,会让你输入授权码,这个是作为smtp登录的密码使用的,详情请看163的smtp说明)

clipboard.png

配置发送的邮箱和密码,注意不是你的邮箱登录密码!

# vi /etc/mail.rc

在底部添加:
set from="xxx@163.com"
set smtp=smtp.163.com
set smtp-auth-user=xxx@163.com
set smtp-auth-password=自己填写的授权码
set smtp-auth=login

测试发送

echo -e "你好!n我来看看你n哈哈" | mail -s "测试邮件" shoujianren@163.com

mail  -s "`date +%F-%T`" shoujianren@163.com </tmp/messages.txt

echo -e "你好!\n我来看看你\n哈哈" | mail -s "测试邮件" xxx@163.com


有的云服务器商封了25端口。

1.开工单,让客服把25号端口开通,例如阿里云TCP 25端口解封申请 https://help.aliyun.com/knowledge_detail/56130.html

2.使用加密端口发送邮件。

mail使用465端口加密发邮件

今天由于服务需求,需要服务器需要发送邮件;但是不论用什么办法,发送邮件总是失败;最终发现原因:阿里云实例服务器默认禁止了25端口;

关闭其它的邮件工具

# systemctl stop sendmail
# systemctl stop postfix

安装mailx

yum install mailx

开启smtp

参考上一步

请求数字证书

这里用的163邮箱,所以向163请求证书

# mkdir /root/.certs

# echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/163.crt

# certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt

# certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt

# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs/./ -i /root/.certs/163.crt

# ls /root/.certs/
163.crt  cert8.db  key3.db  secmod.db

# certutil -L -d /root/.certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

GeoTrust SSL CA                                              P,P,P

配置/etc/mail.rc

# vim /etc/mail.rc

set from=xxx@163.com #之前设置好的邮箱地址
set smtp="smtps://smtp.163.com:465" #邮件服务器
set smtp-auth-user=xxx@163.com #之前设置好的邮箱地址
set smtp-auth-password=xxxx #授权码
set smtp-auth=login #默认login即可
set ssl-verify=ignore #ssl认证方式
set nss-config-dir=/root/.certs #证书所在目录

发送邮件测试

# echo "邮件正文" | mail -s "邮件主题" xxx@163.com

邮件发送成功

image-20220218134340670

mail基本命令发送邮件

1.标题为"test"内容为空的邮件,容易被邮箱服务判为垃圾邮件。

mail -s "test" username2@163.com

2.以文件为内容作为邮件正文:

echo "222222222" > /root/mail1
mail -s test username2@163.com < /root/mail1 
mail -s test2 username1@163.com,username3@163.com < /root/mail1 

3.使用管道进行邮件发送

echo "hello,username3...." | mail -s "hello" username3@163.com

4.发送附件
在linux下使用mail命令发送附件也很简单,不过首先需要安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送,直接使用centos的yum源可能找不到uuencode命令的包sharutils,我这里使用了网易Yum源。

# yum -y install sharutils

# uuencode /root/mail1 | mail -s "fujian" xxxx@163.com < /root/file1

5、使用外部smtp来发送邮件

# vi /etc/mail.rc          #文末添加以下
set from=username1@163.com 
smtp=smtp.163.com
set smtp-auth-user=username1@163.com 
smtp-auth-password=password 
smtp-auth=login

# source /etc/mail.rc	【本人测试,不需要这步即可】
# mail -s "testmail" username@163.com < /etc/passwd
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Python发送邮件可以通过smtplib和email两个模块来实现。首先,需要导入相应的模块。然后,创建一个SMTP对象,指定邮件服务器的地址和端口号。接下来,使用SMTP对象的login方法登录到邮件服务器,需要提供发件人的邮箱地址和授权码。然后,创建一个MIMEMultipart对象作为邮件的主体,设置发件人、收件人和主题。可以使用MIMEText对象来设置邮件的正文内容。如果需要发送HTML格式的邮件,可以使用MIMEText对象的第二个参数设置为'html'。如果需要发送带附件的邮件,可以使用MIMEMultipart对象的attach方法添加附件。最后,使用SMTP对象的sendmail方法发送邮件,需要提供发件人、收件人和邮件内容。以下是一个使用SMTP发送邮件的简单示例代码: ```python import smtplib from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # 创建邮件主体对象 email = MIMEMultipart() # 设置发件人、收件人和主题 email\['From'\] = '[email protected]' email\['To'\] = '[email protected];[email protected]' email\['Subject'\] = Header('上半年工作情况汇报', 'utf-8') # 添加邮件正文内容 content = """好好学习,天天向上""" # 默认为“plain” email.attach(MIMEText(content, 'plain', 'utf-8')) # 创建SMTP_SSL对象(连接邮件服务器smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) # 通过用户名和授权码进行登录 smtp_obj.login('[email protected]', '邮件服务器的授权码') # 发送邮件(发件人、收件人、邮件内容(字符串)) smtp_obj.sendmail( '[email protected]', \['[email protected]', '[email protected]'\], email.as_string() ) ``` 如果需要发送带附件的邮件,可以使用MIMEMultipart对象的attach方法添加附件。以下是一个带附件的邮件发送示例代码: ```python import smtplib from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication # 创建邮件主体对象 email = MIMEMultipart() # 设置发件人、收件人和主题 email\['From'\] = '[email protected]' email\['To'\] = '[email protected];[email protected]' email\['Subject'\] = Header('带附件的邮件', 'utf-8') # 添加邮件正文内容 content = """这是一封带附件的邮件""" email.attach(MIMEText(content, 'plain', 'utf-8')) # 添加附件 attachment = MIMEApplication(open('附件文件路径', 'rb').read()) attachment.add_header('Content-Disposition', 'attachment', filename='附件文件名') email.attach(attachment) # 创建SMTP_SSL对象(连接邮件服务器smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) # 通过用户名和授权码进行登录 smtp_obj.login('[email protected]', '邮件服务器的授权码') # 发送邮件(发件人、收件人、邮件内容(字符串)) smtp_obj.sendmail( '[email protected]', \['[email protected]', '[email protected]'\], email.as_string() ) ``` 请注意,需要将代码中的发件人邮箱地址、收件人邮箱地址、邮件服务器地址、端口号、授权码以及附件文件路径和附件文件名替换为实际的值。 #### 引用[.reference_title] - *1* [Python -- 使用SMTP发送邮件](https://blog.csdn.net/wudj810818/article/details/50418021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python——SMTP发送邮件](https://blog.csdn.net/ljj950408/article/details/81583187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [利用SMTP服务器发送邮件(python)](https://blog.csdn.net/m0_53080574/article/details/127018381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值