Solved

Perl MIME date format help

Posted on 2010-09-21
12
765 Views
Last Modified: 2012-05-10
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
Comment
Question by:georgemason
  • 6
  • 4
12 Comments
 
LVL 8

Expert Comment

by:nognew
Comment Utility
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
 
LVL 1

Author Comment

by:georgemason
Comment Utility
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
 
LVL 1

Author Comment

by:georgemason
Comment Utility
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
 
LVL 8

Expert Comment

by:nognew
Comment Utility
May I see your ftp_create.perl around line 52 please?
I have a feeling something amiss there.
Cheers,
t.
0
 
LVL 1

Author Comment

by:georgemason
Comment Utility
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
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 8

Expert Comment

by:nognew
Comment Utility
Could you please pin point which line on the given snip produce the error and the error message?
Cheers,
t.
0
 
LVL 1

Author Comment

by:georgemason
Comment Utility
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
 
LVL 1

Author Comment

by:georgemason
Comment Utility
(sorry, line 62 in the error relates to line 9 in the snippet)
0
 
LVL 8

Accepted Solution

by:
nognew earned 250 total points
Comment Utility
Are you sure you have
use POSIX;
in the top of you file?
Which Perl version you are on?
Cheers,
t.
0
 
LVL 1

Author Comment

by:georgemason
Comment Utility
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
 
LVL 9

Expert Comment

by:Suhas .
Comment Utility
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Setting up Secure Ubuntu server on VMware 1.      Insert the Ubuntu Server distribution CD or attach the ISO of the CD which is in the “Datastore”. Note that it is important to install the x64 edition on servers, not the X86 editions. 2.      Power on th…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now