首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Net::SMTPS发送电子邮件:使用未初始化值$_

使用Net::SMTPS发送电子邮件:使用未初始化值$_
EN

Stack Overflow用户
提问于 2016-09-26 23:02:17
回答 1查看 1.7K关注 0票数 0

我正在尝试使用Net::SMTPS和gmail发送电子邮件:

代码语言:javascript
复制
#! /usr/bin/env perl

use feature qw(say);
use strict;
use warnings;

use Net::SMTPS;

my $smtp = Net::SMTPS->new(
    'smtp.gmail.com',
    Port    => 587,
    Timeout => 20,
    Debug   => 1,
    doSSL   => 'starttls',
);
die "Initialization failed: $!" if !defined $smtp;

my $sender = my $user = 'hakon.hagland@gmail.com';
my $password = '????';    
say "Trying to authenticate..";
$smtp->auth( $user, $password, 'LOGIN'  ) or die "could not authenticate\n";

my $receiver = 'hakon.hagland@gmail.com';    
$smtp->mail( $sender );
$smtp->to( $receiver );
$smtp->data();
$smtp->datasend( "To: $receiver\n" );
$smtp->datasend( "From: $sender\n" );
$smtp->datasend( "Content-Type: text/html\n" );
$smtp->datasend( "Subject: Testing Net::SMTPS" );
$smtp->datasend( "\n" );
$smtp->datasend( 'The body of the email' );
$smtp->dataend();
$smtp->quit();
say "Done.";

运行此脚本(Ubuntu 16.04,Perl版本5.22.1)时的输出为:

代码语言:javascript
复制
Net::SMTPS>>> Net::SMTPS(0.04)
Net::SMTPS>>>   IO::Socket::INET6(2.72)
Net::SMTPS>>>     IO::Socket(1.38)
Net::SMTPS>>>       IO::Handle(1.35)
Net::SMTPS>>>         Exporter(5.72)
Net::SMTPS>>>   Net::SMTP(3.05)
Net::SMTPS>>>     Net::Cmd(3.05)
Net::SMTPS>>>     IO::Socket::IP(0.37)
Net::SMTPS=GLOB(0x10b2dd8)<<< 220 smtp.gmail.com ESMTP x131sm3965376lff.44 - gsmtp
Net::SMTPS=GLOB(0x10b2dd8)>>> EHLO localhost.localdomain
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-smtp.gmail.com at your service, [195.139.193.120]
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-SIZE 35882577
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-8BITMIME
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-STARTTLS
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-ENHANCEDSTATUSCODES
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-PIPELINING
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-CHUNKING
Net::SMTPS=GLOB(0x10b2dd8)<<< 250 SMTPUTF8
Net::SMTPS=GLOB(0x10b2dd8)>>> STARTTLS
Net::SMTPS=GLOB(0x10b2dd8)<<< 220 2.0.0 Ready to start TLS
Net::SMTPS=GLOB(0x10b2dd8)>>> EHLO localhost.localdomain
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-smtp.gmail.com at your service, [195.139.193.120]
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-SIZE 35882577
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-8BITMIME
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-ENHANCEDSTATUSCODES
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-PIPELINING
Net::SMTPS=GLOB(0x10b2dd8)<<< 250-CHUNKING
Net::SMTPS=GLOB(0x10b2dd8)<<< 250 SMTPUTF8
Trying to authenticate..
Use of uninitialized value $_ in pattern match (m//) at /usr/share/perl/5.22/Net/Cmd.pm line 250.
Use of uninitialized value in join or string at /usr/share/perl/5.22/Net/Cmd.pm line 249.
Net::SMTPS=GLOB(0x10b2dd8)>>> AUTH 
Net::SMTPS=GLOB(0x10b2dd8)<<< 555 5.5.2 Syntax error. x131sm3965376lff.44 - gsmtp
could not authenticate

我想知道为什么我会得到这个错误:

代码语言:javascript
复制
Use of uninitialized value $_ in pattern match (m//) at /usr/share/perl/5.22/Net/Cmd.pm line 250.
Use of uninitialized value in join or string at /usr/share/perl/5.22/Net/Cmd.pm line 249.

在尝试进行身份验证时?

EN

回答 1

Stack Overflow用户

发布于 2016-09-27 02:33:25

尝试下面的代码。更改用户和密码。

它连接到SMTPS。它似乎能在我的linux上工作。

Net::SMTP需要$smtp-> STARTTLS ()来执行STARTTLS命令。

代码语言:javascript
复制
#!/usr/local/bin/perl
use strict;
use warnings;
use utf8;

use Net::SMTP 3.0;
# Force use of Authen::SASL::Perl - it may fix problems with other alternatives
use Authen::SASL qw(Perl);

my $smtp = Net::SMTP->new(
    'smtp.gmail.com',
    SSL=>1,
    Timeout => 20,
    Debug   => 1,
);
die "Initialization failed: $!" if !defined $smtp;

my $sender = my $user = 'john.doe@gmail.com';
my $password = '????';
print "Trying to authenticate..";
$smtp->auth( $user, $password) or die "could not authenticate\n";

my $receiver = 'john.doe@gmail.com';
$smtp->mail( $sender );
$smtp->to( $receiver );
$smtp->data();
$smtp->datasend( "To: $receiver\n" );
$smtp->datasend( "From: $sender\n" );
$smtp->datasend( "Content-Type: text/html\n" );
$smtp->datasend( "Subject: Testing Net::SMTP" );
$smtp->datasend( "\n" );
$smtp->datasend( 'The body of the email' );
$smtp->dataend();
$smtp->quit();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39706195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档