Sending a mail from a linux shell script

后端 未结 11 2017
一个人的身影
一个人的身影 2020-12-04 06:52

I want to send an email from a Linux Shell script. What is the standard command to do this and do I need to set up any special server names?

相关标签:
11条回答
  • 2020-12-04 07:14

    SEND MAIL FROM LINUX TO GMAIL

    USING POSTFIX

    1: install software

    Debian and Ubuntu:

    apt-get update && apt-get install postfix mailutils
    

    OpenSUSE:

    zypper update && zypper install postfix mailx cyrus-sasl
    

    Fedora:

    dnf update && dnf install postfix mailx
    

    CentOS:

    yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
    

    Arch Linux:

    pacman -Sy postfix mailutils
    

    FreeBSD:

    portsnap fetch extract update
    
    cd /usr/ports/mail/postfix
    
    make config
    

    in configaration select SASL support

    make install clean
    
    pkg install mailx
    

    2. Configure Gmail

    /etc/postfix. Create or edit the password file:

    vim /etc/postfix/sasl_passwd
    

    i m using vim u can use any file editer like nano, cat .....

    >Ubuntu, Fedora, CentOS,Debian, OpenSUSE, Arch Linux:

    add this

    where user replace with your mailname and password is your gmail password

    [smtp.gmail.com]:587    user@gmail.com:password
    

    Save and close the file and Make it accessible only by root: becouse its an sensitive content which contains ur password

    chmod 600 /usr/local/etc/postfix/sasl_passwd
    

    >FreeBSD:

    directory /usr/local/etc/postfix.

    vim /usr/local/etc/postfix/sasl_passwd
    

    Add the line:

    [smtp.gmail.com]:587    user@gmail.com:password
    

    Save and Make it accessible only by root:

    chmod 600 /usr/local/etc/postfix/sasl_passwd
    

    3. Postfix configuration

    configuration file main.cf

    6 parameters we must set in the Postfix

    Ubuntu, Arch Linux,Debian:

    edit

     vim /etc/postfix/main.cf
    

    modify the following values:

    relayhost = [smtp.gmail.com]:587
    smtp_use_tls = yes
    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options =
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
    

    smtp_sasl_security_options which in configuration will be set to empty, to ensure that no Gmail-incompatible security options are used.

    save and close

    as like for

    OpenSUSE:

    vim /etc/postfix/main.cf
    

    modify

    relayhost = [smtp.gmail.com]:587
    smtp_use_tls = yes
    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options =
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
    

    it also requires configuration of file master.cf

    modify:

    vim /etc/postfix/master.cf
    

    as by uncommenting this line(remove #)

    #tlsmgr unix - - n 1000? 1 tlsmg
    

    save and close

    Fedora, CentOS:

    vim /etc/postfix/main.cf
    

    modify

    relayhost = [smtp.gmail.com]:587
    smtp_use_tls = yes
    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options =
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
    

    FreeBSD:

    vim /usr/local/etc/postfix/main.cf
    

    modify:

    relayhost = [smtp.gmail.com]:587
    smtp_use_tls = yes
    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options =
    smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
    smtp_tls_CAfile = /etc/mail/certs/cacert.pem
    

    save and close this

    4. Process Password File:

    Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux,Debian:

    postmap /etc/postfix/sasl_passwd
    

    for freeBSD

    postmap /usr/local/etc/postfix/sasl_passwd
    

    4.1) Restart postfix

    Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux,Debian:

    systemctl restart postfix.service
    

    for FreeBSD:

    service postfix onestart
    nano /etc/rc.conf
    

    add

    postfix_enable=YES
    

    save then run to start

    service postfix start
    

    5. Enable "Less Secure Apps" In Gmail using help of below link

    https://support.google.com/accounts/answer/6010255

    6. Send A Test Email

    mail -s "subject" recever@domain.com
    

    press enter

    add body of mail as your wish press enter then press ctrl+d for proper termination

    if it not working check the all steps again and check if u enable "less secure app" in your gmail

    then restart postfix if u modify anything in that

    for shell script create the .sh file and add 6 step command as your requirement

    for example just for a sample

    #!/bin/bash
    REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
    THRESHOLD=80
    
    if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
        mail -s 'Disk Space Alert' mailid@domainname.com << EOF
    Your root partition remaining free space is critically low. Used: $REALVALUE%
    EOF
    fi
    

    The script sends an email when the disk usage rises above the percentage specified by the THRESHOLD varialbe (80% here).

    0 讨论(0)
  • 2020-12-04 07:17

    If both exim and ssmtp are running, you may enter into troubles. So if you just want to run a simple MTA, just to have a simple smtp client to send email notifications for insistance, you shall purge the eventually preinstalled MTA like exim or postfix first and reinstall ssmtp.

    Then it's quite straight forward, configuring only 2 files (revaliases and ssmtp.conf) - See ssmtp doc - , and usage in your bash or bourne script is like :

    #!/bin/sh  
    SUBJECT=$1  
    RECEIVER=$2  
    TEXT=$3  
    
    SERVER_NAME=$HOSTNAME  
    SENDER=$(whoami)  
    USER="noreply"
    
    [[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
    [[ -z $2 ]] && RECEIVER="another_configured_email_address"   
    [[ -z $3 ]] && TEXT="no text content"  
    
    MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"  
    echo -e $MAIL_TXT | sendmail -t  
    exit $?  
    

    Obviously do not forget to open your firewall output to the smtp port (25).

    0 讨论(0)
  • 2020-12-04 07:17

    You don't even need an MTA. The SMTP protocol is simple enough to directly write it to your SMTP server. You can even communicate over SSL/TLS if you have the OpenSSL package installed. Check this post: https://33hops.com/send-email-from-bash-shell.html

    The above is an example on how to send text/html e-mails that will work out of the box. If you want to add attachments the thing can get a bit more complicated, you will need to base64 encode the binary files and embed them between boundaries. THis is a good place to start investigating: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

    0 讨论(0)
  • 2020-12-04 07:19

    you can use 'email' or 'emailx' command.

    (1) $ vim /etc/mail.rc # or # vim /etc/nail.rc

    set from = xxx@xxx.com #
    set smtp = smtp.exmail.gmail.com #gmail's smtp server 
    set smtp-auth-user = xxx@xxx.com #sender's email address
    set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
    set smtp-auth=login
    

    Because if it is not sent from an authorized account, email will get to junk mail list.

    (2) $ echo "Pls remember to remove unused ons topics!" | mail -s "waste topics" -a a.txt developer@xxx.com #send to group user 'developer@xxxx.com'

    0 讨论(0)
  • 2020-12-04 07:24

    Another option for in a bash script:

    mailbody="Testmail via bash script"
    echo "From: info@myserver.test" > /tmp/mailtest
    echo "To: john@mywebsite.test" >> /tmp/mailtest
    echo "Subject: Mailtest subject" >> /tmp/mailtest
    echo "" >> /tmp/mailtest
    echo $mailbody >> /tmp/mailtest
    cat /tmp/mailtest | /usr/sbin/sendmail -t
    
    • The file /tmp/mailtest is overwritten everytime this script is used.
    • The location of sendmail may differ per system.
    • When using this in a cron script, you have to use the absolute path for the sendmail command.
    0 讨论(0)
  • 2020-12-04 07:27

    If you want a clean and simple approach in bash, and you don't want to use cat, echo, etc., the simplest way would be:

    mail -s "subject here" email@address.com <<< "message"
    

    <<< is used to redirect standard input. It's been a part of bash for a long time.

    0 讨论(0)
提交回复
热议问题