Linux两种发邮件的方式

本文介绍如何通过msmtp客户端配置及测试发送邮件,并结合mutt工具实现发送带附件的邮件;同时提供了一个Python脚本示例,用于自动化发送邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、msmtp客户端的方式

1、下载安装msmtp
wget https://marlam.de/msmtp/releases/msmtp-1.6.7.tar.xz
tar -xvJf msmtp-1.6.7.tar.xz
ls
cd msmtp-1.6.7
./configure --prefix=/usr/local/msmtp
make && make install
2、配置msmtp账号
cd /usr/local/msmtp
mkdir etc #配置文件目录和配置文件都要自己建
cd etc
手动创建配置文件vi msmtprc
# Set default values for all following accounts.
defaults
logfile /usr/local/msmtp/msmtp.log
# The SMTP server of the provider.
account default
#你的发送邮件服务器
host smtp.126.com
port 25
#要从哪个邮箱发出
from   xxxx@126.com
#这里如果使用on的话会报 "msmtp: cannot use a secure authentication method"错误
auth login
tls off
#邮箱用户名
user xxxx@126.com
#邮箱用户名
#邮箱密码,这里可是明文的,如果你觉得不安全可以把文件改为600属性
password xxxxxxx
# Set a default account
account default: test
Esc,shift+: 进入命令模式,输入x,保存退出。
由于password是明码,所以我们需要修改此文件的权限 chmod 600 etc/msmtprc
3、测试
/usr/local/msmtp/bin/msmtp youremail@test.com
输入任意字符,然后按Ctrl+D退出,查看邮件是否收到。
由于设置了日志,可以到 /usr/local/msmtp/msmtp.log,查看日志,发信成功失败都会有记录。
按ctrl+d结束
但是它不能够发送附件,所以安装mutt
4、安装mutt
vi /etc/Muttrc ,编辑mutt的总设置,修改以下几行
set from="发送邮件地址"
set sendmail="/usr/local/msmtp/bin/msmtp"
set use_from=yes
set realname="发件人"
set editor="vi"
发件地址最好与msmtp设置的账号相同,否则可能会出错。
5、测试一下mutt是否有效
echo "测试测试" | mutt -s "测试" 测试邮件地址
echo "testmail" |mutt -s "test" [-a /etc/hosts] test@163.com
这里的-a 是指添加附件,如果是多个附件的话就 多加几个 -a 文件名
可以使用mutt进行邮件备份等工作了,结合cron使用,可以实现的功能相当多。

二、使用python脚本发送邮件

脚本如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Wangj
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.126.com'
mail_user = 'username'
mail_pass = 'passwd'
mail_postfix = '126.com'
def send_mail(to_list,subject,content):
    me = "test"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

新建send.py文件,将以上代码复制编辑,设置发件用户、密码。

然后验证脚本是否可以正常发送邮件 ./send.py xxx@139.com  hello test 三个参数分别是:收件人邮箱、邮箱主题、邮箱内容

### 实现在 Linux 中使用 Shell 脚本发送邮件 #### 安装必要的软件包 为了能够在 Linux 上通过 shell 发送电子邮件,需要先安装 `postfix` 和 `mailx` 这两个工具。 ```bash yum -y install postfix mailx ``` 启动并启用 Postfix 服务以便能够正常工作: ```bash systemctl start postfix systemctl enable postfix ``` #### 配置 Mailx 发送外部邮件 编辑 `/etc/mail.rc` 文件来设置 SMTP 认证信息和其他参数。这允许系统通过指定的SMTP服务器发送邮件[^3]。 ```bash set from=example@example.com set smtp=smtp.example.com set smtp-auth-user=example@example.com set smtp-auth-password=your_password_or_token set smtp-auth=login ``` 以上命令中的 `example@example.com`, `smtp.example.com` 及其他字段需替换为实际使用的邮箱地址和对应的 SMTP 设置。 #### 编写 Shell 脚本来发送邮件 创建一个新的 Bash 脚本文件用于定义要发送的内容以及接收者的电子邮箱地址。下面给出了一种简单的例子,展示了怎样构建这样一个脚本[^1]。 ```bash #!/bin/bash SUBJECT="Test Email" EMAIL="recipient@example.com" MESSAGE="This is a test message sent via shell script." echo "$MESSAGE" | mail -s "$SUBJECT" $EMAIL ``` 保存此脚本到某个位置(比如 `/usr/local/bin/send_email.sh`),赋予其可执行权限,并可以通过命令行运行它以测试功能是否有效。 #### 自动化与计划任务 对于定期监控或报警场景下的自动响应机制来说,可以将上述脚本加入 cron job 来周期性触发。例如,每三分钟检查一次内存状况并向管理员报告异常情况。 ```bash */3 * * * * /bin/bash /path/to/monitor_script.sh >/dev/null 2>&1 ``` 这里假设有一个名为 `monitor_script.sh` 的监测程序负责检测特定条件并在必要时调用之前编写的 `send_email.sh` 向相关人员发出警告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菲宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值