为 GAMIT 配置自动发邮件功能

使用 GAMIT 进行批处理基线解算时,可以设置在数据处理完成之后,将数据处理的主要指标通过电子邮件的形式发送到指定的邮箱地址。这在处理需大量耗时的数据时非常有用,但是很多用户都表示并没有收到过邮件。这是因为:GAMIT 需要调用 UNIX/Linux 系统的 mail 或 mailx 程序来实现发邮件的功能,你很可能没有正确配置这个程序。

本文中,我将以 CentOS 和 Ubuntu 两种常用的 Linux 发行版为例,介绍为 GAMIT 程序配置自动发送邮件功能的过程。读者可以作为自己配置时的参考。

配置 mailx 命令

安装 mailx

首先应该测试你的计算机有没有安装 mailx 程序,可以在终端中尝试运行命令:

1
$ mailx

如果提示 “command not found”,那么说明系统尚未安装该程序。对于 Fedora、CentOS 等相似发行版,可以采用如下命令安装:

1
$ sudo yum install mailx

对于 Debian、Ubuntu 等,则采用以下命令:

1
$ sudo apt-get install heirloom-mailx

配置 mailx

用 mailx 程序发送邮件的操作过程是这样的,首先输入命令:

1
$ mailx -s <Subject> <Address@mail.com>

这里的 <Subject><Address@mail.com> 分别代表邮件的主题和递送地址。键入回车键之后开始输入邮件内容,最后按组合键 CTRL + D 结束输入并发送。

理论上,成功安装 mailx 程序后就能用上述命令来发送邮件了,你可以给自己发送一封邮件试一下。但实际上很可能会发生递送错误。这是因为:目前大部分的垃圾邮件过滤机制都会拒收这样的邮件。

为了使 mailx 程序可以正确发送邮件,我们一般采用外部的 SMTP 发送邮件。简言之,就是为 mailx 设置一个公共邮箱服务,使其通过这个公共邮箱来发送邮件。我建议采用网易的邮件服务,配置起来最方便。

网易邮箱注册页面注册一个邮箱地址,然后将该地址设置到 mailx 程序。这里以 “example@163.com” 邮箱为例,其密码假设为 “password”。

然后就是编辑 mailx 程序的配置文件了。对于 Fedora、CentOS 等发行版,打开 /etc/mail.rc;对于 Debian、Ubuntu 等,则打开 /etc/nail.rc。在文件最后添加如下内容(注意替换成你注册的邮箱和密码):

1
2
3
4
# set for 163 smtp
set from = example@163.com smtp = smtp.163.com
set smtp-auth-user = MyLinuxPC smtp-auth-password = password
set smtp-auth = login

如此配置之后,别忘了重新运行 mailx 程序给自己发送邮件试一下。邮件很可能出现在垃圾信箱中,为了使该邮箱地址以后不会被当作垃圾邮件源,建议将其添加到你的邮箱联系人列表中。

配置 GAMIT

配置好 mailx 之后,接下来就是将你的收件地址加入到 GAMIT 的配置文件了。为 GAMIT 批处理命令设置自动发送邮件的选项在 process.defaults 文件中,打开该文件可以看到其中类似的设置项目:

1
2
3
4
5
6
7
# UNIX mail command  
# Most machines
set umail = 'mail -s'
# HP
# set umail = 'mailx -s'
# Mail address for sending the processing report (if '' will default to `whoami` in sh_gamit)
set mailto = ''

该文件中,以字符 “#” 开头的行表示注释。从上段内容中可以看到,目前程序发送邮件时采用的命令是 mail -s,我们可以修改为采用 mailx -s 命令,并且设置 mailto 为你的邮箱地址(注意这里是你接收邮件的地址,而不是上文设置的发送邮件的地址)。此处以 “example@mail.com” 为例,修改配置后如下:

1
2
3
4
5
6
7
# UNIX mail command  
# Most machines
# set umail = 'mail -s'
# HP
set umail = 'mailx -s'
# Mail address for sending the processing report (if '' will default to `whoami` in sh_gamit)
set mailto = 'example@mail.com'

如此设置后,每当数据处理完成时,sh_gamit 命令将调用 mailx -s 命令向你设置的收件地址发送电子邮件。快去试一下吧!