[prev] [thread] [next] [Date index for 2005/02/19]
Ken Miller wrote:
> My web app sends notification emails when a task transitions from one
> part of the work flow to another. I use Mail::Send to send mail, using
> a smtp server to transfer the mail. The code looks something like this:
>
> my $mail = Mail::Send->new( Subject => 'a subject', To =>
> 'someone@xxxxxxx.xxx );
> my $fh = $mail->open( 'smtp', Server => 'some.host.name' );
> print $fh "A message\n";
> $fh->close;
>
> To ensure that the recipient receives the mail from a recognizeable
> email address, I set the MAILADDRESS environment variable as follows:
>
> use constant FROM_ADDRESS => 'somebody@xxxxxxx.xxx';
>
> and then, just before the above code to send the mail, I do this:
>
> local $ENV{ MAILADDRESS } = FROM_ADDRESS
>
> This all works fine, except for one situation:
>
> Ocassionally, the 'From' email address is not the constant address as
> shown above. Instead, it's the 'from' email address from another part
> of the application completely unrelated to this notification email. The
> code that sends this email uses this paradigm:
>
> eval {
> local $ENV{ MAILADDRESS } = $some_other_email_address;
> (same mail boiler plate as above);
> };
>
> It almost seems that the mail address is getting stuck.
>
> I don't have my mod-perl book handy right now, but I seem to remember
> that %ENV is restored after each request to the server startup state -
> is this correct? If so, i should not need 'local' in front of the
> environment assignment, assuming that I'm not worries about the ENV
> changing during a request (which I'm not).
>
> Is there some strange interplay going on between eval, local, and
> mod_perl that could cause this behaviour? I've been unable to duplicate
> the problem in my test environment, so I'm just taking shots in the dark
> hoping to hit something.
>
> Suggestions?
1) which mod_perl version are you using, Ken?
2) why do you use %ENV to pass the 'from' address, rather than pass it
expicitly?
local() has the effect only for the block you defined it in, but if you've
created a closure later on (not in %ENV at all), it may be the reason.
just add debug prints to test it. I have a feeling that that's exactly
what you are doing: creating a closure.
If you want us to look at it, please reduce the problematic code to the
very minimum and post it here.
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@xxxxxx.xxx http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
|
Strange problem with Mail::Send
|
|
Re: Strange problem with Mail::Send
|
Generated at 11:21 on 20 Feb 2005 by mariachi v0.52