Reputation: 7259
I am using a SMTP mail server which require user + ssl authentication for connection. I am looking for the perl modules to connect to the mail server and send emails but doesn't found anything helpful.
Any suggestion for perl module or any perl code would be really appreciated.
I have tried to use Mail::Sendmail and Net::SMTP::SSL to connect to the sendmail server and send mail. Below is the sample code but getting the error user unknown.
Error:
mail: Net::SMTP::SSL=GLOB(0x9599850) not found
RCPT TO: error (550 5.1.1 <[email protected]>... User unknown).
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Mail::Sendmail;
use Net::SMTP::SSL;
my %mail = (
From=> '[email protected]',
To=> '[email protected]',
# Cc will appear in the header. (Bcc will not)
Subject => 'Test message',
'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION",
);
$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465, Debug=>1);
$mail{auth} = {user=>'username', password=>"password", required=>1 };
$mail{'X-custom'} = 'My custom additionnal header';
$mail{Message} = "The message key looks terrible, but works.";
# cheat on the date:
$mail{Date} = Mail::Sendmail::time_to_date( time() - 86400 );
if (sendmail %mail) { print "Mail sent OK.\n" }
else { print "Error sending mail: $Mail::Sendmail::error \n" }
print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;
Upvotes: 2
Views: 16574
Reputation: 313
The error you get is a RCPT TO error not an authentication error. This could be because you actually tried to send mail to a nonexistent user or because you tried to relay through the server without authenticating.
If seems like Mail::Sendmail has no support for SMTP Auth Method ( http://metacpan.org/pod/Mail::Sendmail#LIMITATIONS ) so most likely authentication was not even tried.
You should use the auth method of Net::SMTP:SSL right after you create it's instance:
$mail{Smtp}->auth('username','password');
Upvotes: 0
Reputation: 1
Comcast has moved to SSMTP, so I had to modify my automated message.
Here is some working PERL code for a Comcast mail server. Hope you find it helpful.
#!/usr/bin/perl
use Net::SMTP::SSL;
use MIME::Base64;
$uptime = `uptime`;
$smtp = Net::SMTP::SSL->new
(
"smtp.comcast.net",
Hello => myhost.comcast.net,
Port => 465,
Timeout => 30,
Debug => 0,
);
$smtp->datasend ("AUTH LOGIN\n");
$smtp->response();
# Mailbox info
$smtp->datasend (encode_base64('myuserid')); #username
$smtp->response();
$smtp->datasend (encode_base64('mypassword')); # password
$smtp->response();
# Email from
$smtp->mail ('[email protected]');
# Email to
$smtp->to ('[email protected]');
$smtp->data();
$smtp->datasend("To: [email protected]\n");
$smtp->datasend("From: myuserid\@comcast.net\n");
$smtp->datasend("Subject: My Subject Line");
# Line break to separate headers from body
$smtp->datasend("\n");
$smtp->datasend("Uptime Report - At $uptime\n");
$smtp->dataend();
$smtp->quit();
exit;
Upvotes: 0
Reputation: 8849
I assume you verified the data in this line:
$mail{auth} = {user=>'username', password=>"password", required=>1 };
is the user 'username' (in your reallife code '[email protected]'?) with the password 'password' known at mail.server.com?
If not, I would expect a User unknown
error.
EDIT1 I just saw that you have no 'To' in that mail, 'only' a cc, might your mail server not like that (mine didn't mind, so then :-), or did that 'happen' in trimming down the code?
EDIT2 I was able to reproduce your error by replacing the line
$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465);
with
$mail{Smtp} = Net::SMTP::SSL->new("smtp.mail.com", Port=> 465);
you need to give the mailserer a valid address to send the message to! When I supplied an existing to address (the Cc=>'[email protected]'
line .. it worked!
Upvotes: 2
Reputation: 1851
Maybe you can try Net::SMTP::SSL for connecting over SSL authentification and Net::SMTP::Multipart for attachments support and do something to make them work together.
Upvotes: 0
Reputation: 14386
You should look for such things at search.cpan.org
with terms such as "SMTP" and "SSL". The first hit is Net::SMTP::SSL
, which describes itself as a drop-in replacement for the standard Net::SMTP
. That sounds very much relevant; does it do what you want?
Upvotes: 0