georgemason
asked on
Perl MIME date format help
Hi experts,
I'm writing a Perl script to run on a Linux box which needs to send emails. I'm using Net::SMTP to send the mail, with a subroutine adding the headers etc. being called from the body of the script.
I'm struggling to work out how to generate an RFC2183 date for use in the MIME headers - the top half of the SMTP subroutine is attached.
The format of the time string that I need for the MIME header is: Wed, 12 Feb 1997 16:29:51 -0500
I would like to know what commands will generate this format of date, and which modules I need to include to use them.
Thanks!
George
I'm writing a Perl script to run on a Linux box which needs to send emails. I'm using Net::SMTP to send the mail, with a subroutine adding the headers etc. being called from the body of the script.
I'm struggling to work out how to generate an RFC2183 date for use in the MIME headers - the top half of the SMTP subroutine is attached.
sub send_mail # send SMTP mail
{
my ($from, $to_addr, $subject, $body, $msg, $date);
$from = shift;
$to_addr = shift;
$subject = shift;
$body = shift;
$msg = "MIME-Version: 1.0\n"
. "From: $from\n"
. "To: " . ( ref($to_addr) ? join(';', @$to_addr) : $to_addr ) . "\n"
. "Date: " . date_r() . "\n"
. "Subject: $subject\n\n" # Double \n
. $body;
<snip!>
The format of the time string that I need for the MIME header is: Wed, 12 Feb 1997 16:29:51 -0500
I would like to know what commands will generate this format of date, and which modules I need to include to use them.
Thanks!
George
ASKER
Hi, thanks for that - I get the following output:
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at ./ftp_create.perl line 52, <FILE> line 35.
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at ./ftp_create.perl line 52, <FILE> line 35.
ASKER
I have done some more testing, and in my script, strftime works if passed gmtime but not localtime - but obviously it then doesn't take account of daylight savings.
I've run it in a script on its own and it runs fine as shown above
I'm confused :-/
I've run it in a script on its own and it runs fine as shown above
I'm confused :-/
May I see your ftp_create.perl around line 52 please?
I have a feeling something amiss there.
Cheers,
t.
I have a feeling something amiss there.
Cheers,
t.
ASKER
I've made some changes to the script, so now the problem is at line 63. See below for that section of code.
sub send_mail # send SMTP mail
{
my ($from, $to_addr, $subject, $body, $msg);
$from = shift;
$to_addr = shift;
$subject = shift;
$body = shift;
$date = strftime "%a, %d %b %y %H:%M:%S %z",localtime;
$msg = "MIME-Version: 1.0\n"
. "From: $from\n"
. "To: " . ( ref($to_addr) ? join(';', @$to_addr) : $to_addr ) . "\n"
. "Date: $date\n"
. "Subject: $subject\n\n" # Double \n
. $body;
Could you please pin point which line on the given snip produce the error and the error message?
Cheers,
t.
Cheers,
t.
ASKER
Sure, no problem. I get the following error when the end of line 9 is set to localtime rather than gmtime:
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at ./ftp_create.perl line 62, <FILE> line 205.
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at ./ftp_create.perl line 62, <FILE> line 205.
ASKER
(sorry, line 62 in the error relates to line 9 in the snippet)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I had use "POSIX qw(strftime);" but I added "use POSIX;" too, and then the script still didn't work, but I also got this warning:
Prototype mismatch: sub main::ctime (;$) vs none at /usr/lib/perl5/5.8.8/Expor ter.pm line 65.
at /usr/lib/perl5/5.8.8/i386- linux-thre ad-multi/P OSIX.pm line 19
I'm using Perl5.
Prototype mismatch: sub main::ctime (;$) vs none at /usr/lib/perl5/5.8.8/Expor
at /usr/lib/perl5/5.8.8/i386-
I'm using Perl5.
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
Please see the script below:
Cheers,
t.
Open in new window