如何调试Net :: SMTP Perl程序?

时间:2009-11-01 15:50:28

标签: perl email smtp

我正在构建一个将测试消息发送到另一封电子邮件的应用程序,该程序执行时没有错误,但是当我检查我的电子邮件时没有任何新电子邮件时,请查看我的代码:

my $smtpserver = 'smtp.vix.terra.com.br';
my $smtpuser = 'nathanpc';
my $fromemail = 'nathanpc@terra.com.br';

    my $smtp = Net::SMTP-> new($smtpserver, Timeout => 120);
    $smtp-> mail($smtpuser);
    $smtp-> to('eeepc904@gmail.com');
    $smtp-> data();
    $smtp-> datasend("To: eeepc904\@gmail.com\n");
    $smtp-> datasend("From: nathanpc\@terra.com.br\n");
    $smtp-> datasend("\n");
    $smtp-> datasend("test\n");
    $smtp-> dataend();
    $smtp-> quit;

4 个答案:

答案 0 :(得分:5)

仅仅因为你没有收到电子邮件并不意味着没有发送电子邮件。它可能尚未交付,或者已经交付,过滤或许多其他事情。

电子邮件中可能出现很多很多问题。

  • 带有警告和严格启用的脚本部分在哪里,您加载Net :: SMTP?在运行到Stackoverflow之前帮助自己。
  • 为什么不检查您是否能够连接到邮件服务器?
  • 为什么在致电Debug
  • 时未启用new选项?
  • 是否有任何警告或错误消息?
  • 通过手动连接到服务器尝试相同的SMTP会话时会发生什么?张贴整个成绩单。

在此之前,您可以做很多事情来帮助自己,并且依靠Stackoverflow来解决最基本的问题并不能让您有机会发展自己的技能。

#!perl

use warnings;
use strict;

use Net::SMTP;

my $smtpserver = 'smtp.vix.terra.com.br';
my $smtpuser   = 'nathanpc';
my $fromemail  = 'nathanpc@terra.com.br';

my $smtp = Net::SMTP->new($smtpserver, Timeout => 10, Debug => 1);
die "Could not connect to server!\n" unless $smtp;

$smtp->mail($smtpuser);
$smtp->to('eeepc904@gmail.com');
$smtp->data();
$smtp->datasend("To: eeepc904\@gmail.com\n");
$smtp->datasend("From: $fromemail\n");
$smtp->datasend("\n");
$smtp->datasend("test\n");
$smtp->dataend();
$smtp->quit;

答案 1 :(得分:0)

我认为这应该没问题

    use Net::SMTP;                          # includes NET:SMTP Moduls

$mailServer  = "mail.server.com";       # Name of  SMTP Servers.

$nachricht   = "nachricht.txt";         # Message
$absender    = "absender\@hier.com";    # Sender Email Adress.
$betreff     = "Neue Nachricht";        # Subject
$empfaenger  = "empfaenger\@dort.com";  # reciver Email Adress



$smtp = Net::SMTP->new($mailServer);    # Create New  SMTP Objekt.
                                        # Parameter is the  Name of SMTP
                                        # Server.

$smtp->mail($absender);                 

$smtp->to($empfaenger);                 
                                        .

$smtp->data();                          

$smtp->datasend("Subject: $betreff\n");

$smtp->datasend("To: $empfaenger\n");

$smtp->datasend("\n");                  

close MESSAGE;

$smtp->dataend(); 

$smtp->quit;  

答案 2 :(得分:0)

只需嗅探流量即可查看是否有任何SMTP流量(默认端口为25)。如果你看到它并且它与你发送的内容相符(没有错误),那么就你的代码而言你就没问题了。您的代码不能对成功发送后发生的事件负责(250 Ok:排队......)。

答案 3 :(得分:0)

请致电:

$smtp->debug(1);

创建smtp对象后,将整个会话转换为控制台。