LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   Problems with perl sending email with Gmail SMTP (http://www.linuxquestions.org/questions/programming-9/problems-with-perl-sending-email-with-gmail-smtp-573107/)

sadarax 07-29-2007 03:03 AM

Problems with perl sending email with Gmail SMTP
 
I am trying to send a message with a perl script using the Net::SMTP::TLS module. I can send it using some SMTP servers, but I cannot get gmail's SMTP to work, or Yahoo's.

I disabled all firewalls. If I use this code:
Code:

1 #!/usr/bin/perl -w
2 use warnings;
3 use strict;
4
5  use Net::SMTP::TLS;
6  my $EMAIL_SMTP='smtp.gmail.com';
7  my $EMAIL_HELLO='smtp.gmail.com';
8  my $EMAIL_PORT=587;
9  my $EMAIL_PASSWORD='password';
10
11  my $mailer = new Net::SMTP::TLS
12    (
13      $EMAIL_SMTP,
14      Hello  =>      $EMAIL_HELLO,
15      Port    =>      $EMAIL_PORT,
16      User    =>      $EMAIL_SENDER,
17      Password=>      $EMAIL_PASSWORD,
18    );
19  $mailer->mail('sender@gmail.com');
20  $mailer->to('recepient@gmail.com');
21  $mailer->data;
22  $mailer->datasend("Sent thru TLS!");
23  $mailer->dataend;
24  $mailer->quit;

The script reports:
Quote:

Use of uninitialized value in pattern match (m//) at /usr/local/share/perl/5.8.8/Net/SMTP/TLS.pm line 140, <GEN0> line 7.
Use of uninitialized value in numeric eq (==) at /usr/local/share/perl/5.8.8/Net/SMTP/TLS.pm line 396, <GEN0> line 7.
Use of uninitialized value in concatenation (.) or string at /usr/local/share/perl/5.8.8/Net/SMTP/TLS.pm line 397, <GEN0> line 7.
Use of uninitialized value in concatenation (.) or string at /usr/local/share/perl/5.8.8/Net/SMTP/TLS.pm line 397, <GEN0> line 7.
An error occurred disconnecting from the mail server:
at email.pl line 11
Now, something DOES get sent to my gmail account. But the message shows up in the spam folder, because it has no subject and no message body. All it says in gmail is this:

Quote:

from "sender@gmail.com" <sender@gmail.com>
date Jul 29, 2007 12:55 AM
signed-by gmail.com
mailed-by gmail.com
But there is nothing else. No message body or subject. I would love some help with this. I have confirmed that the module does work, since I can send email through my college account, but I need to be able to use some SMTP server (gmail or yahoo or whatever).

baanbapat 03-19-2008 03:26 AM

Gmail uses SSL and not TLS
 
It's too late to answer the question, never-the-less, for anyone else: gmail uses SSL and not TLS. Therefore you need to use Net::SMTP::SSL.

ewmjc 10-01-2008 10:43 AM

Gmail appears to quit without sending a 221 response
 
Gmail does support TLS on port 587 as well as SSL.

I am getting the same problem. When Email::Send::SMTP::TLS sends the SMTP QUIT command, Gmail appears to just disconnect rather than sending back a 221 response expected by Email::Send::SMTP::TLS.

I made these two changes below to get it to work.

I don't get the empty message you have, but I note your HELO entry is set to Gmail's address rather than your own hostname.

Mike

sub quit:

if(not $num == 221){
-->
if($num && not $num == 221){

sub _response

Added:

unless (defined $line) {return ('','','')}

SearchTheJungle 09-12-2009 07:17 PM

Net::SMTP::TLS
 
Try adding a carriage return as the first line of your message (the body). Worked for me using Net::SMTP::TLS with ActivePERL on Win XP. Good luck.

Like this...

$mailer->data;
$mailer->datasend("\n");
$mailer->datasend("Sent from perl!");
$mailer->dataend;
$mailer->quit;


All times are GMT -5. The time now is 03:40 AM.