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.
0
daveritwick's Avatar, Join Date: Aug 2008
Go4Expert Member
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
0
pradeep's Avatar, Join Date: Apr 2005
Team Leader
Thanks daveritwick! You can receive a mail by monitor the mailbox using POP3, read this http://www.go4expert.com/showthread.php?t=11603
0
0
amu1983's Avatar, Join Date: Oct 2008
Newbie Member
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?
0
pradeep's Avatar, Join Date: Apr 2005
Team Leader
Sendmail performs well in high volume environments.
0
obafemi59's Avatar, Join Date: Dec 2010
Light Poster
Hello can you please explain better to me because im a newbie here
0
erigits's Avatar, Join Date: Aug 2011
Newbie Member
hello.i like ur interests.wat do u take in uni/colle? to do with comp sci or it
0
Tobiasgar's Avatar
Go4Expert Member
College and university are not the main things.. you get better knowledge and experience outside their walls
0
PradeepKr's Avatar
Go4Expert Member
@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?