Script bash per inviare email Bulk con Postfix e Gmail

A volte è necessario inviare la stessa email a più persone, sfortunatamente i nostri provider di servizi di posta non lo permettono, di solito c'è un limite giornaliero per le email in uscita e se mettiamo molti destinatari nel campo Ccn l'email è contrassegnata come spam ed è bloccata.

Per inviare email Bulk ci sono molti servizi professionali, ma se non svolgiamo questa attività regolarmente e non abbiamo bisogno che tutti i destinatari ricevano l'email nello stesso momento, allora possiamo usare un approccio diverso.

Gmail, ad esempio, ci consente di inviare un'email a 500 destinatari differenti ogni 24 ore, ma se utilizziamo il campo CCn con molti destinatari, l'email si blocca. Con queste considerazioni possiamo inviare la nostra email a 500 destinatari, attendere 24 ore e poi inviare la stessa email ad altri 500 destinatari. Ovviamente questo è un lavoro noioso, ma per fortuna possiamo automatizzare il tutto usando Postfix ad un semplice script bash.

Come prima cosa dobbiamo installare e configurare Postfix come relay smtp per Gmail, quindi possiamo usare questo semplice script bash:

#!/bin/bash
# License: GPL
#
# Author: Mentor <[email protected]>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
daily_emails='400'
pause_between_emails='10'
from="From: Name <[email protected]>"
notifications_email="[email protected]"
recipients=([email protected] [email protected] [email protected] [email protected])
subject="Lorem ipsum"
IFS='' read -r -d '' message <<"EOF"
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Tempus quam pellentesque nec nam aliquam sem et. Bibendum at varius vel pharetra vel turpis. Nibh praesent tristique magna sit amet purus. Sed odio morbi quis commodo odio aenean sed adipiscing diam. Dignissim convallis aenean et tortor at. Id donec ultrices tincidunt arcu non sodales neque. Aliquet risus feugiat in ante metus. Morbi leo urna molestie at elementum eu facilisis sed. Et egestas quis ipsum suspendisse ultrices gravida dictum fusce. Egestas erat imperdiet sed euismod nisi porta lorem. Ut morbi tincidunt augue interdum velit euismod in. Amet tellus cras adipiscing enim eu turpis. Convallis a cras semper auctor neque vitae. Quam viverra orci sagittis eu volutpat odio facilisis. Mattis molestie a iaculis at erat pellentesque. Congue quisque egestas diam in arcu cursus euismod quis. Vulputate enim nulla aliquet porttitor lacus luctus accumsan tortor posuere. Vel pharetra vel turpis nunc eget lorem.

Ut enim blandit volutpat maecenas volutpat blandit. Aliquam sem et tortor consequat id porta nibh venenatis cras. Dictumst quisque sagittis purus sit amet volutpat. Nec nam aliquam sem et. Ac turpis egestas maecenas pharetra convallis posuere morbi leo urna. Vel pharetra vel turpis nunc eget lorem. Duis ultricies lacus sed turpis tincidunt id aliquet risus feugiat. Aliquet sagittis id consectetur purus ut. Id interdum velit laoreet id donec. Dolor purus non enim praesent elementum facilisis. Laoreet id donec ultrices tincidunt. Imperdiet proin fermentum leo vel orci porta non pulvinar neque. Sem nulla pharetra diam sit. Bibendum neque egestas congue quisque egestas. Convallis a cras semper auctor neque vitae.

Nullam ac tortor vitae purus faucibus ornare suspendisse sed. Quis ipsum suspendisse ultrices gravida dictum fusce ut. Morbi tristique senectus et netus et malesuada fames. Mauris vitae ultricies leo integer malesuada nunc vel risus. Pellentesque nec nam aliquam sem et tortor consequat id. Amet tellus cras adipiscing enim eu turpis egestas. Tristique sollicitudin nibh sit amet commodo nulla facilisi nullam. Nulla facilisi morbi tempus iaculis urna id volutpat lacus. Tellus mauris a diam maecenas sed enim ut sem viverra. Praesent semper feugiat nibh sed pulvinar. Semper viverra nam libero justo laoreet. Amet mattis vulputate enim nulla aliquet porttitor. Enim sit amet venenatis urna. Dolor purus non enim praesent. Eget nunc scelerisque viverra mauris in aliquam sem.

Sit amet mauris commodo quis imperdiet massa. Purus ut faucibus pulvinar elementum. Nunc aliquet bibendum enim facilisis gravida neque. Vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Cursus risus at ultrices mi tempus imperdiet nulla malesuada. Blandit cursus risus at ultrices mi tempus imperdiet nulla. Scelerisque varius morbi enim nunc faucibus a pellentesque. Dictum non consectetur a erat nam at lectus urna duis. Et netus et malesuada fames ac turpis egestas sed. Id aliquet lectus proin nibh nisl condimentum. Amet venenatis urna cursus eget nunc scelerisque. Purus semper eget duis at tellus at urna condimentum. Aliquet porttitor lacus luctus accumsan tortor posuere ac ut. Purus semper eget duis at tellus at urna. Arcu risus quis varius quam. Sed id semper risus in hendrerit gravida. Cursus euismod quis viverra nibh cras pulvinar mattis. Tincidunt augue interdum velit euismod.

Et magnis dis parturient montes. Consectetur libero id faucibus nisl. Eget nunc lobortis mattis aliquam faucibus purus in. Et leo duis ut diam quam nulla porttitor massa. Laoreet suspendisse interdum consectetur libero id. Vitae aliquet nec ullamcorper sit amet risus. Orci phasellus egestas tellus rutrum tellus. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Vitae tempus quam pellentesque nec nam aliquam sem et tortor. Ipsum a arcu cursus vitae congue mauris.
EOF

partial_count='0'
total_count='0'

if [ -d /etc/postfix ]; then
        if ! [ ${#recipients[@]} -eq 0 ]; then
                echo "Start sending emails."
                echo "Start sending emails." | mail  -a "Content-Type: text/plain; charset=UTF-8" -a "$from" -e -s "Bulk email" $notifications_email
                for i in ${recipients[@]}; do
                        echo "$message" | mail  -a "Content-Type: text/plain; charset=UTF-8" -a "$from" -e -s "$subject" "$i"
                        partial_count=$((partial_count+1))
                        total_count=$((total_count+1))
                        echo "Sent email number $total_count"
                        if [ $partial_count -eq $daily_emails ]; then
                                echo "Reached max daily limit. Sleep for one day."
                                echo "Reached max daily limit. Sleep for one day." | mail  -a "Content-Type: text/plain; charset=UTF-8" -a "$from" -e -s "Bulk email" $notifications_email
				sleep $((86400-$(($daily_emails*$pause_between_emails))))
                                echo "Restart sending emails after sleeping."
                                echo "Restart sending emails after sleeping." | mail  -a "Content-Type: text/plain; charset=UTF-8" -a "$from" -e -s "Bulk email" $notifications_email
                                partial_count='0'
                        else
                                sleep $pause_between_emails
                        fi
                done
                echo "Operation coompleted."
                echo "Operation coompleted." | mail  -a "Content-Type: text/plain; charset=UTF-8" -a "$from" -e -s "Bulk email" $notifications_email
        fi
fi

Questo script è auto esplicativo, molto semplice e molto migliorabile.

Section: