Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Ways to test sendmail

by belize (Deacon)
on Jan 06, 2001 at 22:35 UTC ( [id://50264]=perlquestion: print w/replies, xml ) Need Help??

belize has asked for the wisdom of the Perl Monks concerning the following question:

I recently migrated some sites from one server to another. Information on the new server gained from queries is:

Apache/1.3.12 Cobalt (Unix)
perl5.00503
/usr/sbin/sendmail

I am having the following problem. The form script works flawlessly. At each sub-routine, we have inserted an Error branch to let us know if it doesn't work. The script parses, replaces variables, opens sendmail, and retuirns the correct page upon completion. But no emails are sent.

We have tried multiple emails to test incase an email was not working. The server admins say that sendmail is working. We don't have access to any error logs.

My question: Is there a way to test if sendmail is working other than having it send an email and to see if it returns? I mean shouldn't we have some indication somewhere that the emails are or are not being sent?

Replies are listed 'Best First'.
Re: Ways to test sendmail
by Fastolfe (Vicar) on Jan 06, 2001 at 22:59 UTC
    If sendmail does end up seeming like it's being called correctly and is indeed taking the e-mail from you, perhaps look for the presence of a "dead.letter" file in your home directory.

    I might also try to print the contents of the e-mail it would have sent to sendmail (along with the command-line arguments, if they're variable) in a file to be sure that it's properly formed and everything is being passed to sendmail correctly.

      Interesting, yes there is a dead.letter file generated. What does that mean though? All it is is exactly what should be sent out.

      Thanks for the lead.

        It means sendmail is finding it difficult to deliver your mail. Try printing out a "good" e-mail to a text file (or use the dead.letter you found, though you might have to edit it a bit), and pipe it through sendmail yourself:
        $ sendmail -t <message
        See if sendmail says anything to you.
      Here is the Sub SendMail:

      sub SendMail { if (-e $FORM{'template'}) { } else { &Error('Template File Not Found - Error at sendmail subscri +pt'); } open (FILE, $FORM{'template'}); @File = <FILE>; close (FILE); open (MAIL, "|$mailprog -t") || &Error('Unable to Open Sendmail'); print MAIL "To: $FORM{'mailto'}\n"; print MAIL "From: $FORM{'req-EMail'} ($FORM{'req-FName'} $FORM{'re +q-LName'})\n"; print MAIL "Subject: $FORM{'subject'}\n"; print MAIL "Bcc: \n\n"; print MAIL "This information request form is from the Rainforest & + Reef Resorts of Belize website.\n"; print MAIL "*************************************************\n"; print MAIL "This form was submitted at $time by $FORM{'req-FName'} + $FORM{'req-LName'} ($FORM{'req-EMail'}).\n"; print MAIL "For your records, this is Form Request Number \= $Orde +r from this website.\n"; print MAIL "*************************************************\n\n" +; foreach $File (@File) { $File =~ s/\n//; foreach $Field (@InputFields) { $ReplaceVar = $FORM{$Field}; $SearchVar = '\[' . $Field . '\]'; $File =~ s/$SearchVar/$ReplaceVar/g; } print MAIL "$File\n"; } close (MAIL); }

      After performing this subroutine, it then:

      sub Redirect { if ($FORM{'success'}) { print "Location: $FORM{'success'}\n\n"; } }
      The "success" page is returned, but the mail does not go out and the email is added to the "dead.letter" file.

      Any ideas?

        Hmmm, well Some hints (no big help though):
        sub SendMail { # add debugging my $debug = 6; if (-e $FORM{'template'}) { } else { &Error('Template File Not Found - Error at sendmail subsc +ript'); }
        Normally (note adding the missing file name to error msg):
        if ( ! -e $FORM{'template'}) { &Error('Template File $FORM{template} Not Found - Error at sendma +il subscript'); } open (FILE, $FORM{'template'});<br>
        always:
        open (FILE, $FORM{'template'}) or die "can't open FILE $FORM{tem +plate}: $!";<br> @File = <FILE>; close (FILE); open (MAIL, "|$mailprog -t") || &Error('Unable to Open Sendmail' +);
        Try:
        open (MAIL, "|$mailprog -t") || &Error("Unable to Open $mailprog +: $!"); print "<p>trying: $mailprog -t<br> To: $FORM{mailto}<br> From: $FORM{req-EMAIL} ($FORM{req-FName} $FORM{req-LName})<br> Subject: $FORM{subject}<br>\n" if $debug > 5; print MAIL "To: $FORM{'mailto'}\n"; print MAIL "From: $FORM{'req-EMail'} ($FORM{'req-FName'} $FORM{' +re +q-LName'})\n"; print MAIL "Subject: $FORM{'subject'}\n"; print MAIL "Bcc: \n\n"; print MAIL "This information request form is from the Rainforest + & + Reef Resorts of Belize website.\n"; print MAIL "*************************************************\n" +; + print MAIL "This form was submitted at $time by $FORM{'req-FName +'} + $FORM{'req-LName'} ($FORM{'req-EMail'}).\n"; print MAIL "For your records, this is Form Request Number \= $Or +de +r from this website.\n"; print MAIL "*************************************************\n\ +n" +; foreach $File (@File) { $File =~ s/\n//; foreach $Field (@InputFields) { $ReplaceVar = $FORM{$Field}; $SearchVar = '\[' . $Field . '\]'; $File =~ s/$SearchVar/$ReplaceVar/g;
        This is odd, does each file (file name) possibly have every/any input field w/i it? Anyway, this is/may be 'cooler'
        $File =~ s/\[$Field]/$FORM{$Field}/g; # do you need an 'e' too? } print MAIL "$File\n"; } close (MAIL); }
        Only thing I can see is that, as you don't (here) verify the sender's address or the To: address, it may have junk in there that sendmail doesn't like. Do you need pointy brackets around the actual To|From address parts?

        a

Re: Ways to test sendmail
by ichimunki (Priest) on Jan 06, 2001 at 22:42 UTC
    Two thoughts: LWP::SMTP and
    Please post a snippet from the script and/or HTML form, so we can see that. It sounds like you're not trapping an uncalled system call, or that you're not calling sendmail correctly, or something like that.
Re: Ways to test sendmail
by Anonymous Monk on Jan 07, 2001 at 16:03 UTC
        -bt  Run in address test mode.  This mode reads addresses and shows the
              steps in parsing; it is used for debugging configuration tables.
         -bv  Verify names only - do not try to collect or deliver a message.
              Verify mode is normally used for validating users or mailing lists.
         -v   Go into verbose mode.  Alias expansions will be announced, etc.
    

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://50264]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2024-04-19 20:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found