配置Mail使用SMTP发送邮件

今天分享在 Linux上使用mail命令通过SMTP对外发邮件。
   mail、mailx和sendmail
  先看一下三者的关系:mail是mailx的别名,最初叫nail(与arch linux目前用的S nail基因相同);mail是Heirloom的一个子项目,sendmail是Eric Allman的作品,都是开源项目;mail是用户代理(客户端),sendmail是邮件传输代理(服务器);mail默认使用sendmail对外发送邮件。
  总结:mail和mailx是同一个东西,大约类似于发信用的foxmail、outlook等工具,sendmail大约相当于163/qq邮箱的服务器软件。
   SSL、TLS和STARTTLS
  由前文我们知道云服务器基本上不允许25端口对外通信,要对外发邮件只能考虑465和587端口。那么465和587端口有什么区别?这要先从SSL、TLS和STARTTLS的区别开始说。
  SSL(Secure Socket Layer)是加密传输层,TLS(Transport Layer Security)是SSL的继承者和升级版,提供更好的安全性和性能。SSL有SSL v2、SSL v3两个版本,目前都不建议使用。TLS有TSL v1.0-v1.3,建议至少使用TLS v1.2。
  TLS和STARTTLS两者关系不大,但更让人容易产生误解,原因是名字中都带有TLS。STARTTLS是升级非安全连接为安全连接的协议,并没有强制使用加密。当服务端支持时,客户端和服务端才协商将已经建立的连接升级到SSL或者TLS加密。
  接着看465端口和587端口。我们知道25端口刚被设计出来时是用于转发邮件的,没有考虑认证、加密等问题。随着垃圾邮件泛滥、 网络安全问题严重,MSA、ESMTP/SMTPS等概念和协议被设计出来。1997年465端口被注册用于加密方式(SMTPS)提交邮件,那时STARTTLS还没有捣腾出来。1998年STARTLS标准出炉,规定用587端口以STARTTLS方式提交邮件,465端口被吊销。然而许多客户端不支持STARTTLS,加上非常多邮件服务提供商都在使用465端口作为加密提交端口,于是465就一直这么被用到今天。
  简单来说,465端口只支持加密传输,不符合 互联网号码分配结构(The Internet Assigned Numbers Authority,IANA)的标准,但一直被使用和支持;587端口专门被设计用来提交邮件,传输可以加密也可以不加密。
   配置mail
  明白了基本概念,接下来配置mail使用SMTP对外发送邮件。mail命令的系统级配置文件是/etc/mail.rc,用户级别的默认配置文件是~/.mailrc,也可以通过MAILRC环境变量设置配置文件路径。作为普通用户,我们在本地的~/.mailrc文件进行配置,SMTP的主要配置如下:
set smtp=smtps://smtp.xxx.com:465   # 这里填入smtp地址
set smtp-auth=login                 # 认证方式
set smtp-auth-user=user@xxx.com     # 这里输入邮箱账号
set smtp-auth-password=password     # 这里填入密码
set ssl-verify=ignore               # 忽略证书警告
set nss-config-dir=/etc/pki/nssdb   # 证书所在目录
set from=user@xxx.com               # 设置发信人邮箱和昵称
#set smtp-use-starttls=yes          # STARTTLS时使用
   几个注意点:
  如果是465端口,需要加上smtps://协议;如果是587端口,不需要加smtps://或者写smtp://;
  如果使用587端口通讯,应当显示设置smtp-use-starttls;
  邮件的来源应当与邮箱相同,或者将发信人姓名写在邮箱后的括号中。例如:set from=user@xxxx.com或set from=user@xxx.com(nickname);如果邮箱与认证的不一致,将出现“smtp-server: 553 Mail from must equal authorized user”的错误;
  有些邮件服务器的587端口不是使用STARTTLS而是SMTPS,此时仍需加上smtps://协议,例如126邮箱。
  配置好后,使用mail命令发送邮件:
  echo '邮件内容' | mail -s '邮件标题' 收件人邮箱
  #或者:
  cat 邮件内容.txt | mail -s '邮件标题' 收件人邮箱
  #或者
  mail -s '邮件标题' 收件人邮箱 < 邮件内容.txt
  mail命令的选项非常丰富,具体可查看其文档或这篇 文章
   多账户
  如果想切换发送邮箱怎么办?答案是利用配置文件的account指令或在命令行中指定配置。先看配置文件中指定,在~/.mailrc中将配置改成如下:
# 126不支持STARTTLS,使用465端口
account 126 {
set smtp=smtps://smtp.126.com:465
set smtp-auth=login
set smtp-auth-user=user@126.com
set smtp-auth-password=password
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb
set from=password@126.com
}
# QQ邮箱支持STARTTLS,使用587端口
account qq {
set smtp=smtp://smtp.qq.com:587
set smtp-auth=login
set smtp-auth-user=user@qq.com
set smtp-auth-password=password
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb
set from="user@qq.com(nickname)"
set smtp-use-starttls=yes
}
  配置文件中定义了两个账户,发送邮件时可用-A参数指定发信账户:
  echo 'mail test for 126' | mail -A 126 -s 'mail test' user@xxx.com
  echo 'mail test for qq' | mail -A qq -s 'mail test' user@xxx.com
  除了配置文件,也可以在命令行中用-S参数进行设置。例如:
  echo 'mail test for command line option' | mail -s 'mail test' -S smtp=smtp://smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user=user@qq.com -S smtp-auth-password=password -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from="user@qq.com(nickname)" -S smtp-use-starttls=yes user@xxx.com
  这种方法比较繁琐,就是将配置文件的每一行都作为选项写在命令中。在程序中调用mail命令发送邮件时可以采取这种方法。
   解决警告
  虽然邮件能顺利发送,但每次运行都会出现一行警告:“Error in certificate: Peer's certificate issuer is not recognized.”。这是由于使用加密通信,但客户端不能确认证书是否真实。如果我们将配置中的set ssl-verify=ignore改成set ssl-verify=strict,连接将直接中断而不会继续发邮件。
  要解决这个警告,需要将邮件服务器的证书加入到信任列表。操作步骤如下:
  获取邮件服务器证书:
  # 465端口
  echo -n "" | openssl s_client -connect smtp.xxx.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxx.crt
  # 587端口
  echo -n | openssl s_client -starttls smtp -connect smtp.xxx.com:587 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxx.crt
  # 也可以直接在 浏览器上打开网页版,保存证书为PEM(base64格式)格式然后上传到服务器
  将证书添加到受信任列表:
  certutil -A -n 'xxxx' -t "P,P,P" -d . -i ./xxx.crt
  上述命令中-A表示添加,-n是nickname,可以随意取,例如126或qq;-t表示受信任的标签,可取值是t/c/p三种或者其组合;-d表示证书所在目录,-i指示证书文件的位置。
  在配置文件中更改证书目录:
  # 指向证书文件目录
  set nss-config-dir=/path/to/cert-dir
  网上许多教程的-t标签都是"C,,",实践中发现使用该标签仍会报错(gmail的证书是google自己签发的,用C标签没问题,许多博主估计没试就直接抄来)。通过查阅certutil的用法,使用P标签顺利解决问题。
  配置完成后,再使用mail命令发送邮件,烦人的警告消失不见。
   其他
  "Unexpected EOF on SMTP connection",基本上是由于端口只支持SMTPS导致,将协议改成smtps://即可。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

转自:http://www.51testing.com/html/53/n-3727153.html 侵删

bash: mail: command not found的解决方法

yum -y install mailx


Linux发邮件之mail命令

一、mail命令

1.配置 

vim /etc/mail.rc

文件尾增加以下内容 

set from= 1968089885@qq.com smtp="smtp.qq.com"
set smtp-auth-user=" 1968089885@qq.com" smtp-auth-password=" 123456"
set smtp-auth=login

说明:
from: 对方收到邮件时显示的发件人
smtp: 指定第三方发送邮件的smtp服务器地址
smtp-auth: SMTP的认证方式。默认是LOGIN,也可改为CRAM-MD5或PLAIN方式
smtp-auth-user: 第三方发邮件的用户名
smtp-auth-password: 用户名对应密码

2.Mail命令

% mail --h
mail: illegal option -- -
Usage: mail -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users

注:部分系统参数稍有差异,最好看帮助

 

1)  无邮件正文
  •   mail -s "主题"  收件地址
% mail -s  " 测试 "   1968089885@foxmail.com

 

2) 有邮件正文

  •  mail -s "主题"  收件地址< 文件(邮件正文.txt)
% mail -s  " 邮件主题 "   1968089885@foxmail.com < /data/findyou.txt
  •  echo "邮件正文" | mail -s 邮件主题  收件地址
echo  " 邮件正文内容 " | mail -s  " 邮件主题 "   1968089885@foxmail.com
  •  cat 邮件正文.txt | mail -s 邮件主题  收件地址 
cat  /data/findyou.txt | mail -s  " 邮件主题 "   1968089885@foxmail.com

 

3)  带附件
  •  mail -s "主题"  收件地址  -a 附件 < 文件(邮件正文.txt) 
% mail -s  " 邮件主题 "   1968089885@foxmail.com -a /data/findyou. tar.gz < /data/findyou.txt

3.脚本

sendmail.sh

复制代码
#!/bin/bash
#author:findyou
help(){
    echo  " eg: $0 [Subject] [address] [content_file] [file] "
    echo  ""
   exit  1
}

if [ ! -n  " $1 " ] ;  then
    help
fi

cDate=` date +%Y%m%d`

if [ ! -n  " $2 " ] ;  then
    help
else
    mail_to=$ 2
     echo  "       Send Mail to ${mail_to} "
fi

if [ ! -n  " $4 " ] ;  then
    mail -s $ 1 ${mail_to}<$ 3
else
    mail -s $ 1 -a $ 4 ${mail_to}<$ 3
fi
复制代码

 

使用

[root@ 123]$ ./sendmail. sh  test   1968089885@qq.com  abc.txt
      Send Mail to  1968089885@qq.com
[root@ 123]$

 

说明:建议直接使用命令 ,有脚本只是为了在打印显示相关信息,多此一举。

转自:https://www.cnblogs.com/findyou/p/5760970.html

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabVIEW是一个功能强大的可视化编程语言,也可以用于发送电子邮件。使用LabVIEW发送电子邮件需要借助SMTP(Simple Mail Transfer Protocol)协议进行传输。以下是使用LabVIEW进行SMTP发送邮件的步骤: 1. 首先,需要在LabVIEW中创建一个VI(虚拟仪器),用于发送电子邮件。打开LabVIEW软件并创建一个新的VI。 2. 在Block Diagram窗口中,点击右键,选择"SMTP VIs",然后选择"Create SMTP Connection",创建一个SMTP连接。 3. 连接到SMTP服务器。在"Create SMTP Connection" VIs的输入端输入SMTP服务器的地址和端口号。如果SMTP服务器需要使用身份验证,则还需要提供用户名和密码。 4. 创建邮件消息体。点击右键,选择"SMTP VIs",然后选择"Create Message",创建一个新的邮件消息。 5. 设置邮件的详细信息。在"Create Message" VIs的输入端输入邮件的发件人、收件人、主题和内容等详细信息。 6. 发送邮件。点击右键,选择"SMTP VIs",然后选择"Send Message",发送邮件。 7. 如果需要,可以在发送邮件之后关闭SMTP连接。点击右键,选择"SMTP VIs",然后选择"Close SMTP Connection",关闭SMTP连接。 通过以上步骤,您可以使用LabVIEW发送电子邮件。请注意,发送邮件的成功与否可能会受到SMTP服务器的限制和网络状况的影响。如果遇到问题,您可以检查SMTP服务器的设置和LabVIEW程序中的配置是否正确。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值