Go4Expert (http://www.go4expert.com/)
-   Perl (http://www.go4expert.com/articles/perl-tutorials/)
-   -   Sending Email in Perl (http://www.go4expert.com/articles/sending-email-perl-t13133/)

pradeep 21Aug2008 23:48

Sending Email in Perl
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

  $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

  use Net::SMTP;
  $smtp = Net::SMTP->new('email.go4expert.com');
  $smtp->datasend('To: HeyYou@ThatDomain.com');
  $smtp->datasend('Subject: Whats up?');
  $smtp->datasend("See, I mailed you through my program.\n");

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.

daveritwick 22Aug2008 11:36

Re: Sending Email in Perl
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

pradeep 22Aug2008 14:10

Re: Sending Email in Perl
Thanks daveritwick! You can receive a mail by monitor the mailbox using POP3, read this http://www.go4expert.com/showthread.php?t=11603

shabbir 5Sep2008 23:00

Re: Sending Email in Perl
Nominate for article of the month for August 2008

amu1983 25Oct2008 19:44

Re: Sending Email in Perl
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?

pradeep 30Oct2008 14:36

Re: Sending Email in Perl
Sendmail performs well in high volume environments.

obafemi59 25Dec2010 21:49

Re: Sending Email in Perl
Hello can you please explain better to me because im a newbie here

erigits 5Aug2011 15:23

Re: Sending Email in Perl
hello.i like ur interests.wat do u take in uni/colle? to do with comp sci or it

Tobiasgar 31Aug2011 12:26

Re: Sending Email in Perl
College and university are not the main things.. you get better knowledge and experience outside their walls :nice:

PradeepKr 25Nov2011 20:29

Re: Sending Email in Perl
@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?

All times are GMT +5.5. The time now is 12:38.