Link to home
Start Free TrialLog in
Avatar of georgemason
georgemasonFlag for United Kingdom of Great Britain and Northern Ireland

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.

   
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!>

Open in new window


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
Avatar of nognew
nognew
Flag of United Kingdom of Great Britain and Northern Ireland image

Hi there!
Please see the script below:
Cheers,
t.
#!/usr/bin/env perl

use POSIX;

print strftime("%a, %d %b %y %H:%M:%S %z \n",localtime);

Open in new window

Avatar of georgemason

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.
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 :-/
May I see your ftp_create.perl around line 52 please?
I have a feeling something amiss there.
Cheers,
t.
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;

Open in new window

Could you please pin point which line on the given snip produce the error and the error message?
Cheers,
t.
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.
(sorry, line 62 in the error relates to line 9 in the snippet)
ASKER CERTIFIED SOLUTION
Avatar of nognew
nognew
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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/Exporter.pm line 65.
 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/POSIX.pm line 19

I'm using Perl5.
Avatar of Suhas .
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.