MIME::Lite
可以将额外参数传递给Net::SMTP
构造函数
版本MIME::Lite
3.030在其传递的SSL
参数列表中不包含Net::SMTP
。
是否可以更改而不修改MIME::Lite
源代码?
1 package MIME::Lite;
...
355 $VERSION = '3.030';
...
2843 my @_net_smtp_opts = qw( Hello LocalAddr LocalPort Timeout
2844 Port ExactAddresses Debug );
....
2847 sub __opts {
2848 my $args=shift;
2849 return map { exists $args->{$_} ? ( $_ => $args->{$_} ) : () } @_;
2850 }
....
2852 sub send_by_smtp {
....
2876 my %opts = __opts(\%args, @_net_smtp_opts);
2877 my $smtp = MIME::Lite::SMTP->new( $hostname, %opts )
2878 or Carp::croak "SMTP Failed to connect to mail server: $!\n";
答案 0 :(得分:1)
你可以做的一件事是用__opts
包装一些修改参数传递给它的函数。
第2876行:
my %opts = __opts(\%args, @_net_smtp_opts);
这里的优点是在引用%args
之后,其余参数始终是之前定义的数组@net_smtp_opts
。不幸的是你不能修改它在远处的值(它是一个词法变量),但是你可以这样做:
use strict;
use warnings;
use MIME::Lite;
use Class::Method::Modifiers;
around 'MIME::Lite::__opts' => sub {
my $orig = shift;
push(@_,'SSL') if @_ >= 2 && $_[1] eq 'Hello';
my (@ret) = $orig->(@_);
return @ret;
};
这样每次拨打MIME::Lite::__opts
都会被“截获”,您可以随意修改参数。