不需要注册公网域名和 MX 记录 (不需要架设公网邮件服务器), 通过 Linux 系统自带的 mail 命令即可对公网邮箱发送邮件。不过 mail 命令是依赖 sendmail 的, 所以我们需要先检查安装和配置 sendmail。
一般系统都自带 sendmail,但是只能给内网的邮箱发邮件。如果想给公网的邮箱发邮件 (比如 qq 邮箱) 就需要配置 sendmail.
这里记录 sendmail 的安装启动配置,各取所需。
尝试使用 mail 命令发送一封邮件。
- root@ubuntu4146:/data/gitlabData/backups# mail -s "Hello from Linux Server by shell" ouyangpeng@oaserver.com
- The program 'mail' is currently not installed. You can install it by typing:
- apt-get install mailutils
发送失败,命令 mail 没有安装
因此,我们使用
命令安装 mailutils
- apt-get install mailutils
- root@ubuntu4146:/data/gitlabData/backups# apt-get install mailutils
- 正在读取软件包列表... 完成
- 正在分析软件包的依赖关系树
- 正在读取状态信息... 完成
- 下列软件包是自动安装的并且现在不需要了:
- lib32asan0 lib32atomic1 lib32gcc-4.8-dev lib32gcc1 lib32gomp1 lib32itm1
- lib32quadmath0 lib32stdc++-4.8-dev lib32stdc++6 libbonobo2-common
- libc6-dev-x32 libc6-x32 libgnome2-common libltdl-dev liborbit-2-0 libssl-dev
- libssl-doc libstdc++-4.8-dev libx32asan0 libx32atomic1 libx32gcc-4.8-dev
- libx32gcc1 libx32gomp1 libx32itm1 libx32quadmath0 libx32stdc++-4.8-dev
- libx32stdc++6 pkg-php-tools shtool
- Use 'apt-get autoremove' to remove them.
- 将会安装下列额外的软件包:
- guile-2.0-libs libgsasl7 libkyotocabinet16 liblzo2-2 libmailutils4 libntlm0
- mailutils-common
- 建议安装的软件包:
- mailutils-mh mailutils-doc
- 下列【新】软件包将被安装:
- guile-2.0-libs libgsasl7 libkyotocabinet16 liblzo2-2 libmailutils4 libntlm0
- mailutils mailutils-common
- 升级了 0 个软件包,新安装了 8 个软件包,要卸载 0 个软件包,有 310 个软件包未被升级。
- 需要下载 3,461 kB 的软件包。
- 解压缩后会消耗掉 18.0 MB 的额外空间。
- 您希望继续执行吗? [Y/n] y
- 获取:1 http://cn.archive.ubuntu.com/ubuntu/ trusty-updates/main liblzo2-2 amd64 2.06-1.2ubuntu1.1 [46.1 kB]
- 获取:2 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe libkyotocabinet16 amd64 1.2.76-4 [288 kB]
- 获取:3 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe libntlm0 amd64 1.4-1 [15.3 kB]
- 获取:4 http://cn.archive.ubuntu.com/ubuntu/ trusty/main guile-2.0-libs amd64 2.0.9+1-1ubuntu1 [2,127 kB]
- 获取:5 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe libgsasl7 amd64 1.8.0-2ubuntu2 [117 kB]
- 获取:6 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe mailutils-common all 1:2.99.98-1.1 [245 kB]
- 获取:7 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe libmailutils4 amd64 1:2.99.98-1.1 [398 kB]
- 获取:8 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe mailutils amd64 1:2.99.98-1.1 [225 kB]
- 下载 3,461 kB,耗时 2秒 (1,283 kB/s)
- Selecting previously unselected package liblzo2-2:amd64.
- (正在读取数据库 ... 系统当前共安装有 172915 个文件和目录。)
- Preparing to unpack .../liblzo2-2_2.06-1.2ubuntu1.1_amd64.deb ...
- Unpacking liblzo2-2:amd64 (2.06-1.2ubuntu1.1) ...
- Selecting previously unselected package libkyotocabinet16:amd64.
- Preparing to unpack .../libkyotocabinet16_1.2.76-4_amd64.deb ...
- Unpacking libkyotocabinet16:amd64 (1.2.76-4) ...
- Selecting previously unselected package libntlm0:amd64.
- Preparing to unpack .../libntlm0_1.4-1_amd64.deb ...
- Unpacking libntlm0:amd64 (1.4-1) ...
- Selecting previously unselected package guile-2.0-libs.
- Preparing to unpack .../guile-2.0-libs_2.0.9+1-1ubuntu1_amd64.deb ...
- Unpacking guile-2.0-libs (2.0.9+1-1ubuntu1) ...
- Selecting previously unselected package libgsasl7.
- Preparing to unpack .../libgsasl7_1.8.0-2ubuntu2_amd64.deb ...
- Unpacking libgsasl7 (1.8.0-2ubuntu2) ...
- Selecting previously unselected package mailutils-common.
- Preparing to unpack .../mailutils-common_1:2.99.98-1.1_all.deb ...
- Unpacking mailutils-common (1:2.99.98-1.1) ...
- Selecting previously unselected package libmailutils4.
- Preparing to unpack .../libmailutils4_1:2.99.98-1.1_amd64.deb ...
- Unpacking libmailutils4 (1:2.99.98-1.1) ...
- Selecting previously unselected package mailutils.
- Preparing to unpack .../mailutils_1:2.99.98-1.1_amd64.deb ...
- Unpacking mailutils (1:2.99.98-1.1) ...
- Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
- 正在设置 liblzo2-2:amd64 (2.06-1.2ubuntu1.1) ...
- 正在设置 libkyotocabinet16:amd64 (1.2.76-4) ...
- 正在设置 libntlm0:amd64 (1.4-1) ...
- 正在设置 guile-2.0-libs (2.0.9+1-1ubuntu1) ...
- 正在设置 libgsasl7 (1.8.0-2ubuntu2) ...
- 正在设置 mailutils-common (1:2.99.98-1.1) ...
- 正在设置 libmailutils4 (1:2.99.98-1.1) ...
- 正在设置 mailutils (1:2.99.98-1.1) ...
- update-alternatives: using /usr/bin/frm.mailutils to provide /usr/bin/frm (frm) in 自动模式
- update-alternatives: using /usr/bin/from.mailutils to provide /usr/bin/from (from) in 自动模式
- update-alternatives: using /usr/bin/messages.mailutils to provide /usr/bin/messages (messages) in 自动模式
- update-alternatives: using /usr/bin/movemail.mailutils to provide /usr/bin/movemail (movemail) in 自动模式
- update-alternatives: using /usr/bin/readmsg.mailutils to provide /usr/bin/readmsg (readmsg) in 自动模式
- update-alternatives: using /usr/bin/dotlock.mailutils to provide /usr/bin/dotlock (dotlock) in 自动模式
- update-alternatives: using /usr/bin/mail.mailutils to provide /usr/bin/mailx (mailx) in 自动模式
- Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
- root@ubuntu4146:/data/gitlabData/backups#
首先执行命令
查找 mail 命令的用法
- mail --help
- root@ubuntu4146:/data/gitlabData/backups# mail --help
- Usage: mail [OPTION...] [address...]
- or: mail [OPTION...] -f [OPTION...] [file]
- or: mail [OPTION...] --file [OPTION...] [file]
- or: mail [OPTION...] --file=file [OPTION...]
- GNU mail -- process mail messages.
- If -f or --file is given, mail operates on the mailbox named by the first
- argument, or the user's mbox, if no argument given.
- -a, --append=HEADER: VALUE append given header to the message being sent
- -A, --attach=FILE attach FILE
- --content-type=TYPE set content type for subsequent --attach options
- -e, --exist return true if mail exists
- --encoding=NAME set encoding for subsequent --attach options
- -E, --exec=COMMAND execute COMMAND
- -F, --byname save messages according to sender
- -H, --headers write a header summary and exit
- -i, --ignore ignore interrupts
- -n, --norc do not read the system mailrc file
- -N, --nosum do not display initial header summary
- -p, --print, --read print all mail to standard output
- -q, --quit cause interrupts to terminate program
- -r, --return-address=ADDRESS use address as the return address when sending
- -s, --subject=SUBJ send a message with the given SUBJECT
- -t, --to precede message by a list of addresses
- -u, --user=USER operate on USER's mailbox
- Common options
- --config-file=FILE, --rcfile=FILE
- load this configuration file
- --config-help show configuration file summary
- --config-lint, --rcfile-lint
- check configuration file syntax and exit
- --config-verbose, --rcfile-verbose
- verbosely log parsing of the configuration files
- --no-site-config, --no-site-rcfile
- do not load site configuration file
- --no-user-config, --no-user-rcfile
- do not load user configuration file
- --set=PARAM=VALUE set configuration parameter
- --show-config-options show compilation options
- Global debugging settings
- --debug-level=LEVEL set Mailutils debugging level
- --debug-line-info show source info with debugging messages
- -?, --help give this help list
- --usage give a short usage message
- -V, --version print program version
- Mandatory or optional arguments to long options are also mandatory or optional
- for any corresponding short options.
- Report bugs to <bug-mailutils@gnu.org>.
- root@ubuntu4146:/data/gitlabData/backups#
- mail - s "主题"收件地址
例如我们执行:
- root@ubuntu4146:/data/gitlabData/backups# mail -s "Email Subject : Hello from Linux Server by shell" ouyangpeng@oaserver.dw.gdbbk.com
- Cc:
- Null message body; hope that's ok
- root@ubuntu4146:/data/gitlabData/backups#
提示你输入 Cc 地址,即邮件抄送地址,没有抄送地址则直接回车就完成了邮件的发送。
接着会让你输入邮件正文,当邮件正文输入完成后,需要按 CTRL+D 结束输入。此时我们不填写邮件正文,直接按 CTRL+D 结束输入。它会提示我们 Null message body; hope that's ok。
此时查看 OA 邮件,可以收到刚才发送过来的无正文的邮件。
执行管道命令,来填写邮件正文,例如我们执行命令:
- root@ubuntu4146: /# echo "Email Content:This is the content of mail. Welcome to ouyangpeng's blog : http:/ / blog.csdn.net / ouyang_peng / " | mail -s "Email Subject: Hello from Linux Server by shell " ouyangpeng@oaserver.dw.gdbbk.com
- root@ubuntu4146:/#"
这时,我们收到的 OA 邮件内容如下:
例如我们执行如下命令,则将 / data/gitlabData/backups/log/2017-08-18.log 文件内容当做邮件正文发送了。
- root@ubuntu4146: /# mail -s "Email Subject : Hello from Linux Server by shell" ouyangpeng@oaserver.dw.gdbbk.com < /data / gitlabData / backups / log / 2017 - 08 - 18.log
这时,我们收到的 OA 邮件内容如下:
例如我们执行如下命令,则将 / data/gitlabData/backups/log/2017-08-17.log 文件内容当做邮件正文发送了。
- root@ubuntu4146: /# cat /data / gitlabData / backups / log / 2017 - 08 - 17.log | mail - s "Email Subject : Hello from Linux Server by shell"ouyangpeng@oaserver.dw.gdbbk.com
这时,我们收到的 OA 邮件内容如下:
- root@ubuntu4146:/# mail -s "Email Subject : Hello from Linux Server by shell" ouyangpeng@oaserver.dw.gdbbk.com -A /data/gitlabData/backups/log/2017-08-18.log
- Cc:
- This email attach a file.
- root@ubuntu4146:/#
提示你输入 Cc 地址,即邮件抄送地址,没有抄送地址则直接回车就完成了邮件的发送。
接着会让你输入邮件正文 "This email attach a file.",当邮件正文输入完成后,需要按 CTRL+D 结束输入。
这时,我们收到的 OA 邮件内容如下:
- root@ubuntu4146: /# mail -s "Email Subject : Hello from Linux Server by shell" ouyangpeng@oaserver.dw.gdbbk.com -A /data / gitlabData / backups / auto_backup.sh < /data/gitlabData / backups / log / 2017 - 08 - 18.log
执行如上命令,/data/gitlabData/backups/auto_backup.sh 会当做附件发送,/data/gitlabData/backups/log/2017-08-18.log 的内容会当做正文发送
这时,我们收到的 OA 邮件内容如下:
- root@ubuntu4146:/data/gitlabData/backups# mail --help
- Usage: mail [OPTION...] [address...]
- or: mail [OPTION...] -f [OPTION...] [file]
- or: mail [OPTION...] --file [OPTION...] [file]
- or: mail [OPTION...] --file=file [OPTION...]
- GNU mail -- process mail messages.
- If -f or --file is given, mail operates on the mailbox named by the first
- argument, or the user's mbox, if no argument given.
- -a, --append=HEADER: VALUE append given header to the message being sent
- -A, --attach=FILE attach FILE
- --content-type=TYPE set content type for subsequent --attach options
- -e, --exist return true if mail exists
- --encoding=NAME set encoding for subsequent --attach options
- -E, --exec=COMMAND execute COMMAND
- -F, --byname save messages according to sender
- -H, --headers write a header summary and exit
- -i, --ignore ignore interrupts
- -n, --norc do not read the system mailrc file
- -N, --nosum do not display initial header summary
- -p, --print, --read print all mail to standard output
- -q, --quit cause interrupts to terminate program
- -r, --return-address=ADDRESS use address as the return address when sending
- -s, --subject=SUBJ send a message with the given SUBJECT
- -t, --to precede message by a list of addresses
- -u, --user=USER operate on USER's mailbox
- Common options
- --config-file=FILE, --rcfile=FILE
- load this configuration file
- --config-help show configuration file summary
- --config-lint, --rcfile-lint
- check configuration file syntax and exit
- --config-verbose, --rcfile-verbose
- verbosely log parsing of the configuration files
- --no-site-config, --no-site-rcfile
- do not load site configuration file
- --no-user-config, --no-user-rcfile
- do not load user configuration file
- --set=PARAM=VALUE set configuration parameter
- --show-config-options show compilation options
- Global debugging settings
- --debug-level=LEVEL set Mailutils debugging level
- --debug-line-info show source info with debugging messages
- -?, --help give this help list
- --usage give a short usage message
- -V, --version print program version
- Mandatory or optional arguments to long options are also mandatory or optional
- for any corresponding short options.
- Report bugs to <bug-mailutils@gnu.org>.
- root@ubuntu4146:/data/gitlabData/backups#
查看上面的 mail 帮助文档,使用 -t 选项 指定一个收件人列表。
下面测试发送一封邮件给 3 个人,如下所示:
- root@ubuntu4146: /data/gitlabData / backups#cat / data / gitlabData / backups / log / 2017 - 08 - 17.log | mail - s "Email Subject : Hello from Linux Server by shell" - t yizhongwei@oaserver.dw.gdbbk.com ouyangpeng@oaserver.dw.gdbbk.com huxiaoqiao@oaserver.dw.gdbbk.com
OA 邮箱收到邮件可以看到有三个收件人。
上面的命令是 Ubuntu 系统的 mail 命令的用法,但是在 Center OS 系统时,该命令有所不同
首先通过如下命令
查看系统版本
- lsb_release -a
- [root@localhost gitlabDataBackup]# lsb_release -a
- LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
- Distributor ID: CentOS
- Description: CentOS release 6.8 (Final)
- Release: 6.8
- Codename: Final
然后使用命令
查看 mail 命令的用法
- man help
- [root@localhost gitlabDataBackup]# mail --help
- 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
- [root@localhost gitlabDataBackup]#
使用
命令查看 mail 的更加具体的用法
- man mail
- MAILX(1) User Commands MAILX(1)
- NAME
- mailx - send and receive Internet mail
- SYNOPSIS
- mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . .
- mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name]
- mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]
- DESCRIPTION
- Mailx is an intelligent mail processing system, which has a command syntax reminiscent of ed(1) with lines replaced by messages. It is based on Berkeley Mail 8.1,
- is intended to provide the functionality of the POSIX mailx command, and offers extensions for MIME, IMAP, POP3, SMTP, and S/MIME. Mailx provides enhanced fea-
- tures for interactive use, such as caching and disconnected operation for IMAP, message threading, scoring, and filtering. It is also usable as a mail batch lan-
- guage, both for sending and receiving mail.
- The following options are accepted:
- -A name
- Executes an account command (see below) for name after the startup files have been read.
- -a file
- Attach the given file to the message.
- -B Make standard input and standard output line-buffered.
- -b address
- Send blind carbon copies to list. List should be a comma-separated list of names.
- -c address
- Send carbon copies to list of users.
- -D Start in disconnected mode; see the description for the disconnected variable option.
- -d Enables debugging messages and disables the actual delivery of messages. Unlike -v, this option is intended for mailx development only.
- -e Just check if mail is present in the system mailbox. If yes, return an exit status of zero, else, a non-zero value.
- -E If an outgoing message does not contain any text in its first or only message part, do not send it but discard it silently, effectively setting the skipemp-
- tybody variable at program startup. This is useful for sending messages from scripts started by cron(8).
- -f [file]
- Read in the contents of the user's mbox (or the specified file) for processing; when mailx is quit, it writes undeleted messages back to this file. The
- string file is handled as described for the folder command below.
- -F Save the message to send in a file named after the local part of the first recipient's address.
- -H Print header summaries for all messages and exit.
- -h hops
- Invoke sendmail with the specified hop count. This option has no effect when SMTP is used for sending mail.
- -i Ignore tty interrupt signals. This is particularly useful when using mailx on noisy phone lines.
- -I Shows the 'Newsgroup:' or 'Article-Id:' fields in the header summary. Only applicable in combination with -f.
- -n Inhibits reading /etc/mail.rc upon startup. This option should be activated for mailx scripts that are invoked on more than one machine, because the con-
- tents of that file may differ between them.
- -N Inhibits the initial display of message headers when reading mail or editing a mail folder.
- -q file
- Start the message with the contents of the specified file. May be given in send mode only.
- -r address
- Sets the From address. Overrides any from variable specified in environment or startup files. Tilde escapes are disabled. The -r address options are
- passed to the mail transfer agent unless SMTP is used. This option exists for compatibility only; it is recommended to set the from variable directly
- instead.
- -R Opens any folders read-only.
- -s subject
- Specify subject on command line (only the first argument after the -s flag is used as a subject; be careful to quote subjects containing spaces).
- -S variable[=value]
- Sets the internal option variable and, in case of a string option, assigns value to it.
- -T name
- Writes the 'Message-Id:' and 'Article-Id:' header fields of each message read in the file name. Implies -I. Compressed files are handled as described for
- the folder command below.
- -t The message to be sent is expected to contain a message header with 'To:', 'Cc:', or 'Bcc:' fields giving its recipients. Recipients specified on the com-
- mand line are ignored.
- -u user
- Reads the mailbox of the given user name.
- -v Verbose mode. The details of delivery are displayed on the user's terminal.
- -V Print mailx's version and exit.
- -~ Enable tilde escapes even if not in interactive mode.
- 后面还有很多介绍,就不贴代码了
由上面可以发现,Ubuntu 的 mail 命令和 Center OS 系统的 mail 命令是不一样的,因此在 Center OS 系统想同时发生给多个人的话,不能使用 - t 选项。
因此在 Center OS 上,使用如下命令来进行给多个人发送邮件
- [root@localhost gitlabDataBackup]# echo "Test send mail to multiple people" | mail -s "Congratulation! GitLab clean old backupFiles Success Report." -a /root/gitlabDataBackup/log/2017-08-21.log ouyangpeng@oaserver.dw.gdbbk.com -c yizhongwei@oaserver.dw.gdbbk.com,huxiaoqiao@oaserver.dw.gdbbk.com
- You have new mail in /var/spool/mail/root
- [root@localhost gitlabDataBackup]#
收到的 OA 邮件如下所示:
检查所传送的电子邮件是否送出,或滞留在邮件服务器中
- /usr/lib / sendmail - bp
若屏幕显示为 "Mail queue is empty" 的信息,表示 mail 已送出。
若为其他错误信息,表示电子邮件因故尚未送出。
例如下面执行命令之后,就可以看到有些很久之前的邮件没有发送出去。
系统收到邮件都会保存在 "/var/spool/mail/[linux 用户名]" 文件中。
在 linux 中输入 mail 回车 ,就进入了收件箱,并显示邮件列表。
- root@ubuntu4146: /# mail
- "/
- var / mail / root ": 3 messages 3 new
- >N 1 Cron Daemon 二 8月 15 10: 147/5848 Cron <root@ubuntu4146> /data/gitlabData/backups/auto_backup.sh -D 1
- N 2 Cron Daemon 二 8月 15 10: 147/5848 Cron <root@ubuntu4146> /data/gitlabData/backups/auto_backup.sh -D 1
- N 3 Cron Daemon 三 8月 16 06: 18/793 Cron <root@ubuntu4146> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
- ?
- Return-Path: <root@ubuntu4146.ubantu4146>
- X-Original-To: root
- Delivered-To: root@ubuntu4146.ubantu4146
- Received: by ubuntu4146.ubantu4146 (Postfix, from userid 0)
- id 5A4AC1463CE; Tue, 15 Aug 2017 10:30:37 +0800 (CST)
- From: root@ubuntu4146.ubantu4146 (Cron Daemon)
- To: root@ubuntu4146.ubantu4146
- Subject: Cron <root@ubuntu4146> /data/gitlabData/backups/auto_backup.sh -D 1
- Content-Type: text/plain; charset=ANSI_X3.4-1968
- X-Cron-Env: <SHELL=/bin/sh>
- X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
- X-Cron-Env: <HOME=/root>
- X-Cron-Env: <LOGNAME=root>
- Message-Id: <20170815023037.5A4AC1463CE@ubuntu4146.ubantu4146>
- Date: Tue, 15 Aug 2017 10:30:37 +0800 (CST)"
可以参考我下一篇博客
博客里面详细说明了如何进行任务监控以及邮件通知!
来源: http://blog.csdn.net/ouyang_peng/article/details/77363437