1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
<& /elements/header-popup.html &>
<STYLE>
P.pre {
font-family: monospace;
height: auto;
width: auto;
display: block;
white-space: pre-wrap;
text-align: left;
border: 1px solid #7e0079
}
</STYLE>
<TABLE>
<TR><TD>From:</TD><TD><% $cust_msg->env_from %></TD></TR>
<TR><TD>To:</TD><TD><% $env_to %></TD></TR>
% if ( $date ) {
<TR><TD><% $label{$cust_msg->status} %></TD><TD><% $date %></TD></TR>
% }
% if ( $cust_msg->error ) {
<TR><TD>Error:</TD><TD><% encode_entities($cust_msg->error) %></TD></TR>
% }
<& /elements/menubar.html,
{ 'newstyle' => 1,
'url_base' => $cgi->self_url . ';part=',
'selected' => $selected_index,
},
map { $partnames[$_] => $_ } (0 .. scalar(@parts) - 1),
&>
</TABLE>
<DIV STYLE="text-align:center">
% if ( $selected_part->isa('MIME::Entity') ) {
% my $type = $selected_part->mime_type;
% if ( $type =~ /^text/ ) {
%#<TEXTAREA style="font-family:monospace" readonly=1 cols=80 rows=20>
<P CLASS="pre"><% encode_entities( $selected_part->bodyhandle->as_string ) %></P>
% } else { # show a download link
% my $url = $fsurl . "view/cust_msg_part.html?$custmsgnum+$selected_index";
<A HREF="<% $url %>">
<DIV STYLE="display: inline-block; padding: 4px; border: 2px solid #00c">
% if ( $type =~ /^image\/\w+$/ ) {
<IMG SRC="<% $url %>">
% } else {
<FONT SIZE="+1">Download <% $partnames[$selected_index] %></FONT>
% }
</A>
% }
% } elsif ($selected_part->isa('MIME::Head')) {
<P CLASS="pre"><% encode_entities( $cust_msg->header ) %></P>
% }
</DIV>
<& /elements/footer.html &>
<%init>
my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied" unless $curuser->access_right('View email logs');
my ($custmsgnum) = $cgi->keywords;
$custmsgnum =~ /^(\d+)$/ or die "illegal custmsgnum";
my $cust_msg = qsearchs('cust_msg', { 'custmsgnum' => $custmsgnum });
my $date = '';
$date = time2str('%Y-%m-%d %T', $cust_msg->_date) if ( $cust_msg->_date );
my @to = map { encode_entities($_->format) }
Email::Address->parse($cust_msg->env_to);
my $env_to = join('</TD></TR><TR><TD></TD><TD>', @to);
my %label = (
'sent' => 'Sent:',
'failed' => 'Attempted: ',
'prepared' => 'Not sent',
);
my $partname = sub {
my %friendly_name = ( 'text/plain' => 'Text', 'text/html' => 'HTML' );
my $part = shift;
$part->head->recommended_filename
|| $friendly_name{$part->mime_type}
|| $part->mime_type;
};
my @parts = $cust_msg->parts;
my @partnames = map { &{$partname}($_) } @parts;
push @parts, $cust_msg->entity->head;
push @partnames, mt('Header');
my $selected_part;
my $selected_index = 0;
if ( $cgi->param('part') =~ /^(\d+)$/ ) {
$selected_index = $1 if $1 < scalar(@parts);
}
$selected_part = $parts[$selected_index];
$cgi->delete('part'); # for self_url
</%init>
|