美文网首页shellVim&Shellshell
shell 脚本发送邮件

shell 脚本发送邮件

作者: iOneWay | 来源:发表于2016-06-02 23:02 被阅读4705次

    有时候会使用脚本完成一系列的自动化工作,工作完成后还需要邮件通知相关人员,此时可以使用第三方的工具:SendEmail,最新版本sendEmail-v1.56.tar.gz
    下载地址:http://caspian.dotconf.net/menu/Software/SendEmail/

    sendEmil的使用范例:

    #!/bin/bash
    email_reciver="oneway@163.com lin@126.com"
    #发送者邮箱
    email_sender=373850874@qq.com
    #邮箱用户名
    email_username=373850874
    #邮箱密码
    #使用qq邮箱进行发送需要注意:首先需要开启:POP3/SMTP服务,其次发送邮件的密码需要使用在开启POP3/SMTP服务时候腾讯提供的第三方客户端登陆码。
    email_password=mialbjhzsmuobigf
    
    file1_path="附件一路径"
    file2_path="附件二路径"
    
    #smtp服务器地址
    email_smtphost=smtp.qq.com
    
    email_title="iOS客户端更新"
    email_content="谢谢!"
    
    ./sendEmail -f ${email_sender} -t ${email_reciver} -s ${email_smtphost} -u ${email_title} -xu ${email_username} -xp ${email_password} -m ${email_content} -a ${file1_path} ${file2_path} -o message-charset=utf-8
    

    问题 1

    要使用脚本发送邮件,必须设置发送邮箱开启IMAP/SMTP服务。否则将会报错。
    IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。

    IMAP和POP有什么区别?
    POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件、标记已读等),这是不会反馈到服务器上的,比如:您通过电子邮件客户端收取了QQ邮箱中的3封邮件并移动到了其他文件夹,这些移动动作是不会反馈到服务器上的,也就是说,QQ邮箱服务器上的这些邮件是没有同时被移动的 。但是IMAP就不同了,电子邮件客户端的操作都会反馈到服务器上,您对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。也就是说,IMAP是“双向”的。
    同时,IMAP可以只下载邮件的主题,只有当您真正需要的时候,才会下载邮件的所有内容。

    问题 2

    我使用的系统是Mac OSX EI Capitan, 运行命令时报错如下:

    MaxOS: invalid SSL_version specified at /System/Library/Perl/Extras
    /5.18/IO/Socket/SSL.pm line 368. 
    

    解决方案:
    打开文件: /usr/share/perl5/IO/Socket/SSL.pm
    找到: m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[12])?))$}i
    替换为:m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

    可是接下来的问题又出现了,当你修改完成后却无法保存,被告知权限不够,可是你明明使用的是sudo,超级管理员权限。

    这是由于 OSX EI Capitan之后苹果采用了“Rootless”技术来保护系统内核,用户将没有权限操作系统文件。但是不要紧
    苹果并没有把路封死。
    执行以下命令:

    % dsenableroot
    username = wangwei
    user password:
    root password:
    verify root password:
    
    dsenableroot:: ***Successfully enabled root user.
    

    命令执行后可以使sudo 获取正真的Root用户权限。sudo root用户的密码就是你刚刚设置的密码。

    如果你希望自己的账户拥有root权限,那么你也可以通过添加 -U 参数来达到这一目的:

    dsenableroot -u wangwei
    #其中wangwei为你的用户名
    

    此时你就可以更改/usr/share/perl5/IO/Socket/SSL.pm了。

    关于root权限问题,苹果既然使用了Rootless技术来保护内核虽然给我们造成了一些麻烦,但是一定是有他的道理的,比如更加安全,防止了误操作等。
    所以我们获取到最高权限后,最好再取消Root权限

    取消用户的Root权限
    取消用户Root权限只需要在命令后加参数:-d (disable)

    % dsenableroot -d
    username = wangwei (或者是root)
    user password:
    
    dsenableroot:: ***Successfully disabled root user.
    

    取消特定用户的Root权限:

    dsenableroot -d -u wangwei
    

    关闭“Rootless”

    sudo nvram boot-args="rootless=0"; sudo reboot
    

    文章参考

    1, http://osxdaily.com/2015/02/19/enable-disable-root-command-line-mac/
    2, https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/dsenableroot.8.html

    3, https://github.com/hy0kl/tech-note/blob/master/note/linux.md#sendemail-使用-163-smtp-代理发邮件报错

    相关文章

      网友评论

      • FELIXIOS:问题2的解决方案是:
        Mac 使用快捷键 Command + shift + G 进入到 /System/Library/Perl/Extras/5.18/IO/Socket/SSL.pm <这个路径有所修改,不过在执行时出错的话,sendEmail会给出提示完整路径>
        找到: m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[12])?))$}i
        替换为:m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
        .....

      本文标题:shell 脚本发送邮件

      本文链接:https://www.haomeiwen.com/subject/clmkdttx.html