Linux中通过SHELL发送邮件

Linux中通过SHELL发送邮件,第1张

    笔者做过做过使用python发送邮件- Python使用yagmail库发送邮件 ,那么在不同平台都可以完成一些监控报警功能。但是在linux平台下,如果脚本是shell实现的,可以调用python脚本,也可以直接使用shell来发送。

    1、按照mailx软件包, 安装后在/usr/bin/mail

        sudo yum install mailx -y

    2、修改配置文件/etc/mail.rc

        直接修改配置文件vim /etc/mail.rc, 在最后追加下面的配置,笔者使用的是163邮箱。需要注意的是,需要进入邮箱开启SMTP服务,然后得到一个授权码,用于登录第三方邮件客户端的专用密码。smtp-auth-password即为授权码,而不是邮箱地方密码。

    3、发送邮箱测试

          命令行输入: echo "测试邮件" | mail -s "邮件主题" -a ./myshells/clear_buffcache.sh ***@qq.com  。-s添加邮箱主题,并添加附件后将邮箱内容一起发送给***@qq.com  。邮箱里面立马就可以收到了。

    也可以使用文件内容进行邮件发送:mail -s  "邮件主题"  收件地址  <  mail.txt  。

    也可以在命令行输入邮箱内容:mail -s  "邮件主题"  收件地址  ,输入完这行命令后回车,会进入邮件正文的编写,可以输入任何文字。当邮件正文输入完成后,需要按CTRL+D结束输入后发送。

    如果发送失败,咋命令行会提示错误: message not sent,并会在用户目录下的dead.letter里面显示具体信息。

效果截图

Sendmail :sendmail 是最古老的 MTA(Mail Transfer Agent,电子邮件系统)之一,最早它诞生的时候,Internet 还没有被标准化,当时主机之间使用的是 UUCP 技术来交换邮件。它被设计得比较灵活,便于配置和运行于各种类型的机器。

Qmail :qmail 是新生一代的 MTA 代表,它以速度快、体积小、易配置安装等特性而著称。作者 D.J.Bernstein 是一个数学教授,富有传奇色彩。他于 1995 年开发 qmail,1996 年发布 0.70 版,并使用了多种当时比较先进的 技术,包括 Maildir,与 sendmail 单个 binary 不同的模块化设计,权限分离,以及使用了大量由他编写的配套工具,如 daemontool,ucsip-tcp 等。qmai  迅速成为了 Internet 上最有名的  MTA,使用者众。

postfix :postfix  如今已经独树一帜,流水线、模块化的设计,兼顾了效率和功能。灵活的配置和扩展,使得配置 postfix 变得富有趣味。其主要的特点是速度快、稳定,而且配置/功能非常强大,并和 sendmail 类似,提供了与外部程序对接的 API/protocol。尤其是配置部分,postfix 另一个优势是至今依然保持活跃的开发工作,而且稳步发展,适合高流量大负载的系统,扩充能力较强。本实验也是基于 postfix 服务器软件来实现。

邮件服务器基本的工作原理

MUA(Mail User Agent):向外发送邮件,以及提供用户浏览与编写邮件的功能。

MTA(Mail Transfer Agent):(可以理解为 smtpd 服务器)帮忙将用户的邮件传递出去或接收进来。

MDA(Mail Delivery Agent):将接收下来的邮件存放到对应用户邮筒当中的程序。通过分析 MTA 所收到邮件的表头或内容,来判断此邮件是属于哪个用户,然后决定将此邮件投递给哪个用户的邮筒里。

MRA(Mail Retrieval Agent):通过 MRA 服务器提供的邮政服务协议(POP)来接收自己的邮件。

邮件中继:

SMTPD 要支持邮件路由功能,需要打开 Open Relay 开放式中继。

SMTPD 是根据收件人判断邮件是否需要中继,而且只给指定的客户端中继。

注:当 DNS 上存在多个 MX 记录的主机这时就是根据 DNS 的邮件级判断了。DNS 上定义的值越小,其优先级越高。辅助交换器接受到邮件并不能保存邮件。而是这个辅助交换器会等到主邮件交换器空闲的时候把代替它接受下来的邮件在转给主邮件交换器。所以任何邮件处理都是主邮件交换器处理的。所以我们实际情况下,如果有 2 台服务器做邮件交换器,性能比较高的应该为主的。

安装配置过程中,postfix 通过 Internet 发送和接收 email,并存储在用户邮箱里。同时客户也可以通过 IMAP 或者 POP3 恢复他们的邮件。其中的客户认证是通过  Courier Authdaemon 模块的。下图表示出了这个过程:

出现安装界面时,首先按下 <tab>键切换到确定,然后按下回车。

安装 postfix 的时候会问你安装的服务器类型,对于我们的需要,我们选择默认的 Internet Site,这是最符合我们的服务器类型,然后按下回车确认。

使用 vim 编辑配置文件:

大概在第 31 行,编辑 myhostname,修改为 myhostname = shiyanlou.com。

然后我们把 alias_map 参数修改为 alias_maps = hash:/etc/postfix/virtual,之后会讲解 virtual 里面填写什么。

之后设置 mynetworks 段落,它定义可以使用这台服务器的主机,我们这里就用默认的本地地址。你也可设置为其他地址。

编辑完成后按下 Esc 键,输入 :wq 保存退出。

此命令创建了一个用户 master,其中 -d 和 -m 选项用来为登录名 master 产生一个主目录 /usr/master(/usr 为默认的用户主目录所在的父目录)。

我们编写之前设置的  virtual  文件,这些邮箱地址是用来传送邮件的。

在这个文件里,我们将设置一个表,对应相关的邮件地址。

完成后保存关闭文件。

我们可以通过调用下面这个命令来实现我们的映射:

接着我们重启 postfix,完成我们的修改:

我们可以用 shiyanlou 这个账号给 master 这个账号发一封邮件。首先我们需要安装一个命令行收发邮件的软件 mailutils 。

写一封邮件

输入如下内容:

其中 -s 参数是指邮件的标题,<后面是将要发送的邮件内容从 hello.txt 中重定向。这个命令如果正确执行不会有输出。

然后我们切换到 master 用户,查看我们的邮件。

按下回车建可以查看邮件内容,输入 quit 即可退出邮箱。

Linux 邮件服务器原理介绍,编译安装 Postfix 实现本地的邮件服务

Ubuntu 服务器指南-邮件服务-Postfix

how-to-run-your-own-mail-server-with-mail-in-a-box-on-ubuntu-14-04

CI 里面有强大的 Email 类来提供一些功能,很少有介绍CI 的东西,这里介绍CI的email类的使用方法,来自CI 中国官方网站。

比如 多协议:Mail、Sendmail 和 SMTP 多个收件人 抄送和密 HTML 或纯文本邮 附 自动换 邮件优先 密送批处理模式,开启时,大邮件列表将被分成小批次密送。 Email 调试工具

发送邮件

发送邮件不仅简单,而且可以发送时进行配置或者将参数放到配置文件中。

这里是一个发送邮件的标准示例。注意:该示例是假定使用一个控制器来发送邮件。

$this->load->library('email')

$this->email->from('your@example.com', 'Your Name')

$this->email->to('someone@example.com')

$this->email->cc('another@another-example.com')

$this->email->bcc('them@their-example.com')

$this->email->subject('Email Test')

$this->email->message('Testing the email class.')

$this->email->send()

echo $this->email->print_debugger()

设置 Email 参数

有17个不同的有效参数来提供给你如何定制你发送的电子邮件。您可以在此手动设置,或自动通过你储存在的配置文件中的来设置,描述如下:

参数设定通过一系列的参数值去完成电子邮件的initialize功能。这里有一个例子,说明怎样设置一些参数设定:

$config['protocol'] = 'sendmail'

$config['mailpath'] = '/usr/sbin/sendmail'

$config['charset'] = 'iso-8859-1'

$config['wordwrap'] = TRUE

$this->email->initialize($config)

说明: 大多数参数都有默认值,如果你没有配置这些参数,它们的默认值就会被使用。

在配置文件中设置 Email 参数

如果您不想使用使用上述方法设定参数,您可以把它们放入一个配置文件。创建一个新文件称为email.php,添加$config数组在该文件中。然后将该文件保存为config/email.php它将自动的被使用。如果您保存了一个参数配置文件,就不需要使用$this->email->initialize()函数来初始化参数了

$this->email->from()Email 函数参考

设置发件人email地址和名称:

$this->email->from('you@example.com', 'Your Name')

$this->email->reply_to()

设置邮件回复地址. 如果没有提供这个信息,将会使用”from()”函数中的值. 例如:

$this->email->reply_to('you@example.com', 'Your Name')

$this->email->to()

设置收件人email地址(多个). 地址可以是单个、一个以逗号分隔的列表或是一个数组:

$this->email->to('someone@example.com')$this->email->to('one@example.com,two@example.com,three@example.com')$list = array('one@example.com', 'two@example.com', 'three@example.com')

$this->email->to($list)

$this->email->cc()

设置抄送(Carbon Copy / CC) email地址(多个). 类似to()函数, 地址可以是单个、一个以逗号分隔的列表或是一个数组.

$this->email->bcc()

设置暗送(Blind Carbon Copy / BCC) email地址(多个). 类似to()函数, 地址可以是单个、一个以逗号分隔的列表或是一个数组.

$this->email->subject()

设置email主题:

$this->email->subject('This is my subject')

$this->email->message()

设置email正文部分:

$this->email->message('This is my message')

$this->email->set_alt_message()

设置可选的邮件EMAIL正文部分:

$this->email->set_alt_message('This is the alternative message')

这是EMAIL可选的一部分,如果你发送带HTML的邮件,这可以用到。它用于当接收邮件都不支持HTML格式时显示给用户的内容。如果你没有设置这部分,CodeIginiter会自动从邮件正文中提取去掉TAGS的部分。

$this->email->clear()

将所有EMAIL的变量清空. 这个方法用于当你在循环中发送邮件时,可以在两次循环中重新设置邮件内容。

foreach ($list as $name =>$address)

{

$this->email->clear()

$this->email->to($address)

$this->email->from('your@example.com')

$this->email->subject('Here is your info '.$name)

$this->email->message('Hi '.$name.' Here is the info you requested.')

$this->email->send()

}

如果将参数设为TRUE,附件也会被清空:

$this->email->clear(TRUE)

$this->email->send()

发送EMAIL. 根据发送结果,成功返回TRUE,失败返回FALSE。就可以将它用于判断语句:

if ( ! $this->email->send())

{

// Generate error

}

$this->email->attach()

添加附件。第一个参数是文件路径/文件名. 注意: 用路径而不是URL。多次使用该函数可以添加多个附件:

$this->email->attach('/path/to/photo1.jpg')

$this->email->attach('/path/to/photo2.jpg')

$this->email->attach('/path/to/photo3.jpg')

$this->email->send()

$this->email->print_debugger()

返回包含邮件内容的字符串,包括EMAIL头和EMAIL正文。用于调试。

取消自动换行

如果你启用自动换行(建议遵循 RFC 822),EMAIL中有一个非常长的链接它将会换行,导致链接不能被收信人直接点击打开。CodeIgniter可以对正文的部分片段避免这种自动换行,比如:

The text of your email that

gets wrapped normally.

{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}

More text that will be

wrapped normally.

将你不想自动换行的部分放入:{unwrap}{/unwrap}中间


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7526362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存