Revision 469 (by ahitrov, 2014/12/24 13:57:26) Moving Contenido to Apache 2

<%args>

	$email	=> undef
	$etype	=> 'mixed'
	$smtp	=> undef

</%args>
<%init>

  return	unless ref $email;

  use MIME::Lite;
  use MIME::Base64;

  my $subject = $email->{subject};
  $subject = MIME::Base64::encode($subject);
  $subject =~ s/\s//sgi;
  $subject = '=?koi8-r?B?'.$subject.'?=';

  my $emailfrom;
  my ($from, $efrom) = $email->{from} =~ /^(.*?)<(.*?)>/ ? ($1, $2) : $email->{from} =~ /<(.*?)>/ ? ('',$1) : ('',$email->{from});
  if ( $from ) {
	$from = MIME::Base64::encode($from);
	$from =~ s/\s+$//si;
	$from = '=?koi8-r?B?'.$from.'?=';
	$emailfrom = $from.' <'.$efrom.'>';
  } else {
	$emailfrom = $efrom;
  }

  my $emailto;
  my ($to, $eto) = $email->{to} =~ /^(.*?)<(.*?)>/ ? ($1, $2) : $email->{to} =~ /<(.*?)>/ ? ('',$1) : ('',$email->{to});
  if ( $to ) {
	$to = MIME::Base64::encode($to);
	$to =~ s/\s+$//si;
	$to = '=?koi8-r?B?'.$to.'?=';
	$emailto = $to.' <'.$eto.'>';
  } else {
	$emailto = $eto;
  }
  my $ccmail;
  if ( exists $email->{cc} && ref $email->{cc} eq 'ARRAY' ) {
	foreach my $cc ( @{ $email->{cc} } ) {
		my ($cce, $ecce) = $cc =~ /^(.*?)<(.*?)>/ ? ($1, $2) : $cc =~ /<(.*?)>/ ? ('',$1) : ('',$cc);
		$cc = $ecce;
	}
	$ccmail = join ', ', @{$email->{cc}};
  } elsif ( exists $email->{cc} && $email->{cc} ) {
	my ($cce, $ecce) = $email->{cc} =~ /^(.*?)<(.*?)>/ ? ($1, $2) : $email->{cc} =~ /<(.*?)>/ ? ('',$1) : ('',$email->{cc});
	$ccmail = $ecce;
  }


  my $body = $email->{body};
  warn Dumper($email);
  my $dt = Contenido::DateTime->new;
  $dt->set_locale('en_EN');
  my $pdate = $dt->strftime("%a, %d %b %Y %H:%M:%S %z");
  my $msg = MIME::Lite->new(
		To      => $emailto,
		From	=> $emailfrom,
		$ccmail ? ( Cc => $ccmail ) : (),
		Subject => $subject,
#		Encoding=> 'binary',
		Date	=> $pdate,
		Type	=> ($etype eq 'mixed' ? 'multipart/mixed' : $etype eq 'related' ? 'multipart/related;type="multipart/alternative";charset="koi8-r"' : $etype),
	);
  $msg->attach(
		'Type' => 'text/html;charset="koi8-r"',
		'Data' => $body,
		'Disposition'	=> '',
	);

  if ( $smtp ) {
	$msg->send('smtp', $smtp, Debug => 0)
  } else {
	$msg->send();
  }

</%init>