주요 콘텐츠로 건너뛰기

응용 프로그램은 단지 중요한 조건을 감지, 당신은 응용 프로그램 로그 또는 syserr_log 메시지를 쓸 수 있지만 응용 프로그램에주의가 필요하다는 것을 지금 어떻게 누군가에게 알릴 수 있습니까? 다른 사람이나 어쩌면 여러 사람에게 전자 메일 이나 SMS 메시지를 보낼 명백한 대답하지만 OpenVOS는이 작업을 수행하는 방법에 내장되지 않은, 또는 그것을합니까?

gnu_library Perl 명령과 많은 수의 Perl 모듈(pm 파일, 프로그램 모듈과 혼동하지 않음)이 포함됩니다. 이러한 모듈 중 하나는 SMTP.pm. 문서에 따르면 "SMTP 및 ESMTP 프로토콜에 클라이언트 인터페이스를 구현하여 perl5 응용 프로그램이 SMTP 서버와 대화할 수 있습니다."

나는 그 모듈을 사용하여 다음과 같은 펄 스크립트를 작성했습니다. 인수 없이 스크립트를 호출하면 사용 메시지가 표시됩니다.

펄 smtp.pl

사용:
   펄 smtp.pl -hub MAILHUB -에서 SENDER@DOMAIN -subject 주제
                -메시지 메시지 [메시지 메시지]*
                - RECIPIENT@DOMAIN [-RECIPIENT@DOMAIN]*
                【-자세한 내용 】

필요한 인수는 SMTP 서버 일명 메일허브(-h), 보낸 사람, 전자 메일 주소(-f), 제목(-s) 및 최소 1개의 메시지 라인(-m) 및 받는 사람(-t)입니다. 제목 또는 메시지 줄의 텍스트에 공백이 포함된 경우 텍스트를 따옴표로 동봉해야 합니다. -v는 선택적 디버깅 지원이며 SMTP 서버와의 모든 인수 및 통신을 표시해야 한다는 것을 나타냅니다.

예를 들어 휴대폰에 연결된 계정에 전자 메일을 보내려면 실행할 수 있습니다.

펄 smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s '테스트 1'-m 'n
+etwork는 전화에 충돌 '-m 지금! -~XXXXXX@YYYYY.com

당신이 볼 수 있듯이, 당신은 단지 그들의 첫 번째 편지에 인수를 축약 할 수 있습니다, 미안하지만 당신은 내 휴대 전화의 전자 메일 계정을 볼 수 없습니다. 메일은 마치 처럼 보였다

출신: 노아 데이비드
테스트 1
2010년 10월 28일 오후 12:42

네트워크가 전화가 충돌하고 있습니다.
Nwo!

문자 메시지를 보내는 것은 전자 메일을 보내는 것과 정확히 동일하지만 "to" 주소는 phonenumber@phonecompany. 전화 번호는 분명히 전화번호입니다. 전화 회사 도메인은 전화 회사에 따라 다릅니다.

예를 들어

펄 smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s '테스트 2' -m 'n
+etwork는 전화에 충돌 '-m 지금! -~5555555555@phonecompany

회선이 결합되어 있고 내 전화 번호 나 서비스 공급자를 볼 수 없습니다.

제목:테스트 2
 네트워크가 지금 전화 충돌!

여기와 여기다음 목록을 구성하는 항목을 발견했다 .. 나는 스프린트와 버라이존을 테스트했습니다, 당신은 다른 사람과 함께 자신에 있습니다.

올텔 message.alltel.com
AT&T txt.att.net
AT&T MMS MMS.att.net
싱큘러 cingularme.com
메트로 PCS MyMetroPcs.com
넥셀 messaging.nextel.com
파워텔 ptel.net
스프린트 messaging.sprintpcs.com
선컴 tms.suncom.com
T-모바일 tmomail.net
미국 셀룰러 email.uscc.net
버라이존 vtext.com
버진 모바일 vmobl.com

gnu_library 설치되지 않은 경우 ftp.stratus.com 서버에 SMTP 클라이언트가 설치되어 있지 않으면 여기를클릭하여 번들을 다운로드할 수 있습니다. 번들에는 모든 하드웨어 유형 및 TCP 스택에 대한 소스 코드 및 프로그램 모듈이 포함됩니다.

send_smtp_mail.pm-양식

-------------------------------- send_smtp_mail ------------------------------
 - smtp_server:
 -~
 -cc:
 -bcc:
 - 에서 :
 -reply_to:
 - return_receipt_to:
 - 주제 :
 message_1:
 message_2:
 message_3:
 message_4:
 message_5:
 message_6:
 -send_file:
 - smtp_port: smtp
 - retry_times:
 - user_name:
 - 암호 :
 - 제어 :
 -도메인:
 - 중요 : 일반 -send_file_mode : 텍스트
 - 승인 : 없음 -force_ : 없음

다음은 예제 실행입니다.

send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids@stratus.com -sub '테스트
+ 3' -msg '네트워크가 전화에 충돌하고있다'-msg 'NOW!!'-XXXXXX@YYYYY.com
XXXXXX@YYYYY.com 보낸 메일

명령줄 인수는 양식의 인수와 다릅니다. 명령줄 인수를 표시하려면 -help 옵션을 사용합니다.

send_smtp_mail.pm -help                                                        

명령줄 구문: (모든 인수에는 따라야 할 값이 필요합니다)

-서버 |
 -포트 |p
 -에 ;; ...
 -cc;; ...
 -bcc;; ...
 -에서 |fr
 -회신 |rp
 -리턴|rtn
 -중요도 |나는 높은 |보통|낮음
 -피험자 |서브
 -msg |m(복수 허용)
 -파일 |f /텍스트 |html|text_encl|text_encl|html_encl(여러 허용)
 -auth|로그인
 -사용자 |u(로그인 오트에만 필요)
 - 암호 | 패스 (로그인 오트에만 필요)
 -중괄호 |b 예 |아니오
 -도메인 |돔
 -재시도|레트
 -제어 |c

VOS 폼 모드를 활성화하려면 다른 모든 옵션 앞에 -vos 옵션을 제공합니다.

이러한 명령은 어떻게 응용 프로그램에 통합합니까? 응용 프로그램이 Perl 스크립트인 경우 내 스크립트를 템플릿으로 사용하여 SMTP 모듈로 전화를 걸 수 있습니다. 동일한 토큰으로 send_smtp_mail 모듈의 C 코드를 C 응용 프로그램에 통합할 수 있습니다. 다른 대안은 응용 프로그램에서 직접 Perl 또는 send_smtp.mail 명령을 호출하는 것입니다. 응용 프로그램이 C에 있다고 가정하면 다음 호출이 작동합니다.

시스템("펄 smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -'APPL
+ICATION 경고' -m '일부 실패 이벤트가 발생했습니다'-t XXXXXX@YYYYY.com");

PL1 또는 코볼을 사용하는 경우 C 루틴을 작성하고 응용 프로그램에 바인딩해야 합니다.

마지막으로 오류에 대해 이야기해 보겠습니다.

에서 주소에 문제가있는 경우 SMTP Perl 모듈은보고합니다

펄 smtp.pl -h mailhub.stratus.com -f noah.davids -m '디버그 테스트 라인 1' -m '드
+버그 테스트 라인 2' -m '디버그 테스트 라인 3' -XXXXXX@YYYYY.com -'테스트 4'
주소에서 오류 설정 은 자세한 모드를 설정하는 것이 좋습니다

제안된 자세한 인수를 사용하면 SMTP 서버가 보고하는 내용을 확인할 수 있습니다.

perl smtp.pl -h mailhub.stratus.com -f noah.davids -m 'debug test line 1' -m 'de
+bug test line 2' -m 'debug test line 3' -to XXXXXX@YYYYY.com -s 'test 4' -v
mailhub = mailhub.stratus.com
from = noah.davids
subject = test 4
message [0] = debug test line 1
message [1] = debug test line 2
message [2] = debug test line 3
to [0] = XXXXXX@YYYYY.com

Net::SMTP: Net::SMTP(2.24)
Net::SMTP:   Net::Cmd(2.21)
Net::SMTP:     Exporter(5.566)
Net::SMTP:   IO::Socket::INET(1.26)
Net::SMTP:     IO::Socket(1.27)
Net::SMTP:       IO::Handle(1.21)

Net::SMTP=GLOB(0x402f9c04)>>> MAIL FROM:
Net::SMTP=GLOB(0x402f9c04)<<< 553 5.5.4 ... Domain name required fo
+r sender address noah.davids
Error setting from address  suggest setting verbose mode

send_smtp_mail.pm은 추가 적인 도발없이 SMTP 서버의 응답을보고합니다.

send_smtp_mail.pm-s mailhub.stratus.com -fr noah.davids -sub 'test 4' -msg 'b
주소에서 +광고' -msg 'NOW!!' -XXXXXX@YYYYY.com
send_smtp_mail: 예상 250회 응답.  도착: 553 5.5.4 노아.데이비드... 도메인 이름 r
+equired

메일 허브에 연결할 수 없는 경우 Perl 스크립트가 보고됩니다.

perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'test 1' -m 'n
+etwork is crashing call in' -m NOW!! -to XXXXXX@YYYYY.com
Cannot reach mailhub <mailhub.stratus.com>

send_smtp_mail 명령 보고서

pm>send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids@stratus.com -sub 'te
+st 2' -msg '네트워크가 전화 충돌' -msg 'NOW!!' -XXXXXX@YYYYY.com
send_smtp_mail: 연결할 수 없습니다: 네트워크에 도달하려는 mailhub.stratus.com
+ed는 연결할 수 없습니다.

나쁜 "to" 주소는 두 명령에서 오류를 생성하지 않습니다. 메일 허브에서 "보낸" 주소로 메일이 배달될 수 없다는 전자 메일이 발생할 수 있습니다.

smtp.pl 펄 스크립트:

# smtp.pl begins here
#
#
# Version 1.00 10-10-31
# noah.davids@stratus.com
#
use Net::SMTP;
use Getopt::Long;
use strict;

my ($mailHub, @To, $From, $Subject, @Message, $Verbose);
my ($Result, $i, $toList);
my ($smtp);

$Result = GetOptions ("hub=s"      => $mailHub,
                      "to=s"       => @To,
                      "from=s"     => $From,
                      "subject=s"  => $Subject,
                      "message=s"  => @Message,
                      "verbose"    => $Verbose);

if (($Result != 1) || !defined($mailHub) || !defined($From) ||
                      !defined($Subject) || !defined(@Message) ||
                      !defined(@To))
   {
   if (defined($mailHub)) { print "mailhub = " . $mailHub . "n"; }
   if (defined($From))    { print "from = " . $From . "n" ; }
   if (defined($Subject)) { print "subject = " . $Subject . "n"; }
   for ($i = 0; $i < @Message; $i++)
        { print "message [" . $i . "] = " . $Message[$i] . "n"; }
   for ($i = 0; $i < @To; $i++)
        { print "to [" . $i . "] = " . $To[$i] . "n"; }
   print "nnUsage:n";
   print "tperl smtp.pl -hub MAILHUB -from SENDER@DOMAIN -subject SUBJECTn";
   print "ttt-message MESSAGE [-message MESSAGE]*n";
   print "ttt-to RECIPIENT@DOMAIN [-to RECIPIENT@DOMAIN]*n";
   print "ttt[-verbose]nn";
   exit;
   }

if (defined($Verbose))
   {
   if (defined($mailHub)) { print "mailhub = " . $mailHub . "n"; }
   if (defined($From))    { print "from = " . $From . "n" ; }
   if (defined($Subject)) { print "subject = " . $Subject . "n"; }
   for ($i = 0; $i < @Message; $i++)
        { print "message [" . $i . "] = " . $Message[$i] . "n"; }
   for ($i = 0; $i < @To; $i++)
        { print "to [" . $i . "] = " . $To[$i] . "n"; }
   }

$smtp = Net::SMTP->new($mailHub) || die "Cannot reach mailhub <" .
                                        $mailHub . ">n";

if (defined($Verbose)) { $smtp->debug(1); }

$smtp->mail($From) || die "Error setting from address <" . $From .
                          "> suggest setting verbose moden";

$toList = $To[0];
$smtp->to($To[0]) || die "Error setting to address <" . $To[0] .
                          "> suggest setting verbose moden";

for ($i = 1; $i < @To; $i++)
    {
    $toList = $toList . ";" . $To[$i];
    $smtp->to($To[$i]) || die "Error setting to address <" . $To[$i] .
                          "> suggest setting verbose moden";

    }

$smtp->data() || die "Error setting data suggest setting verbose moden";

$smtp->datasend("To: " . $toList . "n") ||
       die "Error sending To string <" . $toList .
           "> suggest setting verbose moden";

$smtp->datasend("Subject: " . $Subject . "n") ||
       die "Error sending Subject string <" . $Subject .
           "> suggest setting verbose moden";

$smtp->datasend("n") ||
       die "Error sending newline suggest setting verbose moden";

for ($i = 0; $i < @Message; $i++)
   {
   $smtp->datasend($Message[$i] . "n") || die
       die "Error sending message " . $i . " <" . $Message[$i] .
           "> suggest setting verbose moden";
   }

$smtp->dataend() || die "Error ending data send " .
                        "suggest setting verbose moden";

$smtp->quit || die "Error closing connection suggest setting verbose moden";
#
# smtp.pl ends here