Sometimes, you may find the need to send a large number of emails in batch. For example, you may be a TA of a course and are required to notify all the students of their grades. In this case, sending email in the batch would save lots of time and effort. In the following are my notes on how to achieve this using Ruby.
First, you need to install Ruby and the mail library. You can install the library by
gem install mail.
Second, since there are lots of emails to be sent, it is a better idea to maintain a single SMTP connection to the email server to reduce the overhead. This is also beneficial to avoid possible network issues. You can open an SMTP connection using following Ruby codes, which connects to the email server in my department.
1 2 3 4 5 6 7 8 9 10 11 require "mail" require "socket" smtp_conn = Net::SMTP.new("mh2.comp.hkbu.edu.hk", 465) smtp_conn.set_debug_output $stderr smtp_conn.enable_tls smtp_conn.start Socket.gethostname, "<username>", "<password>", "login" Mail.defaults do delivery_method :smtp_connection, connection: smtp_conn end
Finally, format your emails and deliver them. It is worth noting that you should sleep a few seconds between each email delivering to avoid DoSing the email server.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # format the email mail = Mail.new do from 'email@example.com' to 'firstname.lastname@example.org' subject '<subject>' body '<body>' add_file filename: 'some_attachment.txt', content: File.read('/path/to/attachment.txt') end # check the email puts mail # send the email mail.deliver! sleep 2 # wait a bit # handle next email