Re: Problem with email attachment, 1 becomes 10

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
On Mon, 05 May 2008 03:07:53 +0200, M.O.B. i L. wrote:

Quoted text here. Click to load it

I don't know the answer to your question, but after reading it I wonder
if anyone else can solve it for you, so I'll post my advice instead. One
piece of advice which has been useful to me which I learnt from the
posting guidelines for this group is, before posting, to always try to
reduce the problem to the minimum possible, let's say ten or twenty lines
of code:

  "First make a short (less than 20-30 lines) and *complete* program
  that illustrates the problem you are having. People should be able
  to run your program by copy/pasting the code from your article. (You
  will find that doing this step very often reveals your problem
  directly. Leading to an answer much more quickly and reliably than
  posting to Usenet.)"

In the case of your program there are two big chunks: first, lots of
stuff involving reading lines from the database, which is where I suspect
the problem has occurred, probably some kind of slip-up, but I can't
prove this because I don't have the database available, and then there is
an almost separate piece of code which involves sending a mail with an
attachment, which might be where the bug happened, although I think it's

If I was going to seriously try to solve your problem, I would first of
all split the program into two pieces, one which gets those database
lines and just prints them to STDOUT, and another piece which sends just
one mail with some fixed parameters, written into the file itself rather
than pulled from a database, and see which one of these two pieces is
going wrong.

Then, if I still couldn't debug it myself, I might try posting whichever
of the two pieces the problem had occurred in to the newsgroup. But it's
very hard (for me at least) to work out what might have happened in your
program because of all the dependencies. As it says in the quote above,
if you can reduce the dependencies to a minimum piece of code which
anybody can run, you'll probably end up solving your own problem into the
bargain. I have repeatedly had problems in Perl which I thought were
incredibly difficult, ended up frustrated enough to want to post them
here, and in the business of reducing them into a short newsgroup post as
described, I ended up surprising myself by working out what the bug was
without having to post it.

Having said all that, perhaps someone will spot the bug in your code the
next minute after I post this, so who knows?

Re: Problem with email attachment, 1 becomes 10

Ben Bullock wrote:
Quoted text here. Click to load it

You're right but if I had been lucky and someone had had this problem
before I could have saved a day. I did follow your advice on isolating
the problem.

I found a fix, see
<>. There is a bug in
sub datasend in /usr/local/share/perl/5.8.8/Net/SMTP/

Now I learned one should always read the bug reports carefully.

With the fix this shortened script works (long lines may have wrapped):

# v0.0.0
# Author: Mikael O. Bonnier,, /
# Copyright (C) 2008 by Mikael O. Bonnier, Lund, Sweden.
# License: GNU GPL v3 or later,

use strict;
use Email::Send;
use Email::MIME::Creator;
use MIME::Words qw/encode_mimewords/;
use IO::All;

my %settings = (
     SMTP        => '',
     PORT        => 587,
     FROM_DOMAIN => '',
     FROM        => '',
     SUBJECT     => 'IntresseanmĂ€lan som fysiker eller programutvecklare',
     BODY =>
         'Det skulle vara intressant att jobba hos er pĂ„ $cCompany.',
     UPLDDIR => '../Documents/LyX',
     FILE    => 'MOB_CV.pdf',
@ARGV == 4
     or die
'Provide username and password for the SMTP server, and company name and
     . " on the command line.\n";

my $mailer = Email::Send->new(
         mailer      => 'SMTP::TLS',
         mailer_args => [
             Host     => $settings,
             Port     => $settings,
             User     => $settings,
             Password => $settings,
             Hello    => $settings,

my $row =
             cCompany => $settings,
             cEmail   => $settings,

     my $body_text = $settings;
     $body_text =~ s/$cCompany/$row->/g;

     # multipart message
     my @parts = (
             attributes => {
                 content_type => 'text/plain',
                 encoding     => '8bit',
                 charset      => 'utf-8',
             body => $body_text,
             attributes => {
                 filename     => $settings,
                 content_type => 'application/pdf',
                 encoding     => 'base64',
                 disposition  => 'inline',
                 name         => $settings,
             body => io( $settings.'/'.$settings )->all,

     my $email = Email::MIME->create(
         header => [
             From           => $settings,
             'Reply-To'     => $settings,
             To             => $row->,
             'User-Agent'   => 'Thunderbird (X11/20080505)',
#             'MIME-Version' => '1.0',
             Subject        => encode_mimewords( $settings ),
         attributes => {
             charset        => '',
         parts  => [ @parts ],

     eval { $mailer->send($email) };
     die "Error sending email: $@" if $@;


Site Timeline