今天抽空测试了一下,要使用Socks代理连接,我们需要Net::SOCKS这个模块,基本代码如下。
#!/usr/bin/perl -w use strict; use Net::SMTP_auth; use Net::SOCKS; #smtp邮件服务器和端口 my $smtpHost = 'smtp.163.com'; my $smtpPort = '25'; my $sslPort = '465'; #auth info to connect socks server my $socksServer = 'x.x.x.x'; my $socksUser = 'username'; my $socksPass = 'password'; my $socksPort = '1080'; #smtp服务器认证用户名密码(就是你登陆邮箱的时候的用户名和密码) my $username = 'user@163.com'; my $passowrd = 'password'; #邮件来自哪儿,要去哪儿,邮件标题 my $from = 'from@163.com'; my $to = 'to@somedomain.com'; my $subject = '[Notice]TEST MAIL'; #设置邮件header my $header = << "MAILHEADER"; From:$from To:$to Subject:$subject Mime-Version:1.0 Content-Type:text/plain;charset="UTF-8" Content-Trensfer-Encoding:7bit MAILHEADER #设置邮件内容 my $message = << "MAILBODY"; TEST MAILBODY MAILBODY #获得邮件域名部分,用于连接的时候表名身份 my @helo = split /@/,$from; #连接到socks服务器 my $sock = new Net::SOCKS(socks_addr => $socksServer, socks_port => $socksPort, user_id => $socksUser, user_password => $socksPass, protocol_version => 5); #通过socks代理与smtp服务器建立连接 my $sockfd = $sock->connect( peer_addr => $smtpHost, peer_port => $smtpPort ) || die "通过Socks代理连接到$smtpHost失败!"; #通过socks代理与smtp的连接句柄,与smtp服务器通信并验证用户 my $smtpHandle = Net::SMTP_auth->new_from_fd( $sockfd, 'r+' ) or die("Error:拷贝连接handle失败!"); $smtpHandle->getline(); $smtpHandle->hello($helo[1]); $smtpHandle->auth('LOGIN',$username,$passowrd) or die("Error:认证失败!"); #发送邮件 $smtpHandle->mail($from); $smtpHandle->to($to); $smtpHandle->data(); $smtpHandle->datasend($header); $smtpHandle->datasend($message); $smtpHandle->dataend(); $smtpHandle->quit(); print "OK"; $sock->close(); exit 0;
转载请注明:爱开源 » Perl通过Socks代理发送邮件