[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

Perl MIME date format help

Posted on 2010-09-21
12
Medium Priority
?
783 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
12 Comments
 
LVL 8

Expert Comment

by:nognew
ID: 33726416
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
ID: 33726769
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
ID: 33727086
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
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 
LVL 8

Expert Comment

by:nognew
ID: 33727095
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
ID: 33734924
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
 
LVL 8

Expert Comment

by:nognew
ID: 33735595
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
ID: 33736060
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
ID: 33736066
(sorry, line 62 in the error relates to line 9 in the snippet)
0
 
LVL 8

Accepted Solution

by:
nognew earned 1000 total points
ID: 33736090
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
ID: 33737391
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 .
ID: 37313515
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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Join Greg Farro and Ethan Banks from Packet Pushers (http://packetpushers.net/podcast/podcasts/pq-show-93-smart-network-monitoring-paessler-sponsored/) and Greg Ross from Paessler (https://www.paessler.com/prtg) for a discussion about smart network …
Google Drive is extremely cheap offsite storage, and it's even possible to get extra storage for free for two years.  You can use the free account 15GB, and if you have an Android device..when you install Google Drive for the first time it will give…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
Six Sigma Control Plans

650 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