• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 785
  • Last Modified:

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
0
georgemason
Asked:
georgemason
  • 6
  • 4
1 Solution
 
nognewCommented:
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

0
 
georgemasonAuthor Commented:
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.
0
 
georgemasonAuthor Commented:
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 :-/
0
Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

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

0
 
nognewCommented:
Could you please pin point which line on the given snip produce the error and the error message?
Cheers,
t.
0
 
georgemasonAuthor Commented:
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.
0
 
georgemasonAuthor Commented:
(sorry, line 62 in the error relates to line 9 in the snippet)
0
 
nognewCommented:
Are you sure you have
use POSIX;
in the top of you file?
Which Perl version you are on?
Cheers,
t.
0
 
georgemasonAuthor Commented:
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.
0
 
Suhas .QA ManagerCommented:
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now