Sending Email in Perl

pradeep's Avatar author of Sending Email in Perl
This is an article on Sending Email in Perl in Perl.
Rated 5.00 By 62 users
As Perl programmer we might want to shoot off a mail for some reason or the other, especially if we've used Perl for the web. Perl being such a powerful language, it's can do virtually anything you want to do with it. Sending a mail is a piece of cake, be it using sendmail or using SMTP. CPAN is a vast reposiroty of modules, modules for every task you might be able to think.

Sending Mails using Sendmail



Sendmail [www.sendmail.org] is a mail transfer agent that is a well-known project of the open source, free software and Unix communities, which is distributed both as free software and proprietary software, you can find it on most Unix/Linux installations.

Here's an example of sending mails with sendmail.
Code: Perl
#!/usr/bin/perl
 
  $path_to_sendmail = '/usr/sbin/sendmail -t'; # this is the usual location of the sendmail program,
                        # see if your's is somewhere else
  open MAIL,"|$path_to_sendmail"; # open a pipe to the program
  print MAIL q(From: deepz@go4expert.com
  To: HeyYou@ThatDomain.com
  Subject: Whats up?
 
  See, I mailed you through my program.
  );
 
  close MAIL;

That's it. Wasn't that easy!! Let's make it easier by using a Perl module Email::Send::Sendmail

Code: Perl
use Email::Send;
 
  my $message = q(From: deepz@go4expert.com
  To: HeyYou@ThatDomain.com
  Subject: Whats up?
 
  See, I mailed you through my program.
  );
  Email::Send->new({mailer => 'Sendmail'})->send($message);

Sending Mails Using SMTP



Most of you must be knowing what SMTP is, is a protocol for sending mails, read more here.
For sending mails using SMTP we'll use a very popular Perl module Net::SMTP.

Code: Perl
#!/usr/bin/perl
 
  use Net::SMTP;
 
  $smtp = Net::SMTP->new('email.go4expert.com');
 
  $smtp->mail('deepz@go4exper.com');
  $smtp->to('HeyYou@ThatDomain.com');
 
  $smtp->data();
  $smtp->datasend('To: HeyYou@ThatDomain.com');
  $smtp->datasend('Subject: Whats up?');
  $smtp->datasend("\n");
  $smtp->datasend("See, I mailed you through my program.\n");
  $smtp->dataend();
 
  $smtp->quit;

So, I hope it was helpful, some of you might want to checkout the module Net::SMTP_auth which helps you autheticate to the SMTP server before sending any mails, most SMTP servers today aren't open relays.
Go4Expert Member
22Aug2008,11:36   #2
daveritwick's Avatar
A very very useful tutorial man Thanks for that. But tell me that can we also receive the mail back when some on reply on the perl mail to our actual email address
Team Leader
22Aug2008,14:10   #3
pradeep's Avatar
Thanks daveritwick! You can receive a mail by monitor the mailbox using POP3, read this http://www.go4expert.com/showthread.php?t=11603
Go4Expert Founder
5Sep2008,23:00   #4
shabbir's Avatar
Nominate for article of the month for August 2008
Newbie Member
25Oct2008,19:44   #5
amu1983's Avatar
Great! I was just looking for something like this for my company phpBB forum. Sadly, I didn't get a permission from IT-Admin to use the company mail server for the forum (due to potential high traffic), so this one would be to rescue. Any comments on how Sendmail would perform in a high volume environment?
Team Leader
30Oct2008,14:36   #6
pradeep's Avatar
Sendmail performs well in high volume environments.
Light Poster
25Dec2010,21:49   #7
obafemi59's Avatar
Hello can you please explain better to me because im a newbie here
Newbie Member
5Aug2011,15:23   #8
erigits's Avatar
hello.i like ur interests.wat do u take in uni/colle? to do with comp sci or it
Go4Expert Member
31Aug2011,12:26   #9
Tobiasgar's Avatar
College and university are not the main things.. you get better knowledge and experience outside their walls
Go4Expert Member
25Nov2011,20:29   #10
PradeepKr's Avatar
@pradeep, thatnks for this info.

I had written something similar but had a problem when my manager asked me a question that what if sendmail itself is not installed on a server. He asked me to write something which is very basic and works with basic perl modules.

So my question to you. What if sendmail is not installed?