Revision 539 (by ahitrov, 2016/01/19 08:56:56) Fix for cc

<%args>

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

</%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 = '=?utf-8?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 = '=?utf-8?B?'.$from.'?=';
	$emailfrom = $from.' <'.$efrom.'>';
  } else {
	$emailfrom = $efrom;
  }

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


  my $body = $email->{body};
  warn Dumper($email)			if $DEBUG;
  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="utf-8"' : $etype),
	);
  $msg->attach(
		'Type' => 'text/html;charset="utf-8"',
		'Data' => $body,
		'Disposition'	=> '',
	);

  $msg->send();

</%init>