# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::Modules::AdminEmail; use strict; use warnings; our $ObjectManagerDisabled = 1; use Kernel::Language qw(Translatable); sub new { my ( $Type, %Param ) = @_; # allocate new hash for object my $Self = {%Param}; bless( $Self, $Type ); return $Self; } sub Run { my ( $Self, %Param ) = @_; my $Note = ''; my ( %GetParam, %Errors ); my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request'); my $UserObject = $Kernel::OM->Get('Kernel::System::User'); my $GroupObject = $Kernel::OM->Get('Kernel::System::Group'); for my $Parameter (qw(From Subject Body Bcc GroupPermission NotifyCustomerUsers)) { $Param{$Parameter} = $ParamObject->GetParam( Param => $Parameter ) || $Param{$Parameter} || ''; } # ------------------------------------------------------------ # # send email # ------------------------------------------------------------ # if ( $Self->{Subaction} eq 'Send' ) { # challenge token check for write action $LayoutObject->ChallengeTokenCheck(); # check needed stuff for my $Needed (qw(From Subject Body GroupPermission)) { if ( !$Param{$Needed} ) { $Errors{ $Needed . 'Invalid' } = 'ServerError'; } } # get array params for my $Parameter (qw(UserIDs GroupIDs RoleIDs)) { if ( $ParamObject->GetArray( Param => $Parameter ) ) { @{ $GetParam{$Parameter} } = $ParamObject->GetArray( Param => $Parameter ); } } if ( !%Errors ) { # get user recipients address my %Bcc; for my $UserID ( $ParamObject->GetArray( Param => 'UserIDs' ) ) { my %UserData = $UserObject->GetUserData( UserID => $UserID, Valid => 1, ); if ( $UserData{UserEmail} ) { $Bcc{ $UserData{UserLogin} } = $UserData{UserEmail}; } } # get group recipients address for my $GroupID ( $ParamObject->GetArray( Param => 'GroupIDs' ) ) { my %UserList = $GroupObject->PermissionGroupGet( GroupID => $GroupID, Type => $Param{GroupPermission}, ); my @GroupMemberList = sort keys %UserList; for my $GroupMember (@GroupMemberList) { my %UserData = $UserObject->GetUserData( UserID => $GroupMember, Valid => 1, ); if ( $UserData{UserEmail} && $UserData{UserID} != 1 ) { $Bcc{ $UserData{UserLogin} } = $UserData{UserEmail}; } } } # get customerusers that are a member of the groups if ( $Param{NotifyCustomerUsers} ) { for my $GroupID ( $ParamObject->GetArray( Param => 'GroupIDs' ) ) { my @GroupCustomerUserMemberList = $Kernel::OM->Get('Kernel::System::CustomerGroup')->GroupMemberList( Result => 'ID', Type => $Param{GroupPermission}, GroupID => $GroupID, ); for my $GoupCustomerUserMember (@GroupCustomerUserMemberList) { my %CustomerUserData = $Kernel::OM->Get('Kernel::System::CustomerUser')->CustomerUserDataGet( User => $GoupCustomerUserMember, Valid => 1, ); if ( $CustomerUserData{UserEmail} ) { $Bcc{ $CustomerUserData{UserLogin} } = $CustomerUserData{UserEmail}; } } } } # get role recipients addresses for my $RoleID ( $ParamObject->GetArray( Param => 'RoleIDs' ) ) { my %RoleMemberList = $GroupObject->PermissionRoleUserGet( RoleID => $RoleID, ); for my $RoleMember ( sort keys %RoleMemberList ) { my %UserData = $UserObject->GetUserData( UserID => $RoleMember, Valid => 1, ); if ( $UserData{UserEmail} ) { $Bcc{ $UserData{UserLogin} } = $UserData{UserEmail}; } } } for my $BccKey ( sort keys %Bcc ) { $Param{Bcc} .= $Bcc{$BccKey} . ', '; } # check needed stuff if ( !$Param{Bcc} ) { $Note = $LayoutObject->Notify( Priority => 'Error', Info => Translatable('Select at least one recipient.'), ); $Errors{BccInvalid} = 'ServerError'; } # if no errors occurred if ( !%Errors ) { # clean up $Param{Body} =~ s/(\r\n|\n\r)/\n/g; $Param{Body} =~ s/\r/\n/g; # get content type my $ContentType = 'text/plain'; if ( $LayoutObject->{BrowserRichText} ) { $ContentType = 'text/html'; # verify html document $Param{Body} = $LayoutObject->RichTextDocumentComplete( String => $Param{Body}, ); } # send mail my $Sent = $Kernel::OM->Get('Kernel::System::Email')->Send( From => $Param{From}, Bcc => $Param{Bcc}, Subject => $Param{Subject}, Charset => $LayoutObject->{UserCharset}, MimeType => $ContentType, Body => $Param{Body}, ); if ( !$Sent->{Success} ) { return $LayoutObject->ErrorScreen(); } my $BccText = $Param{Bcc}; $BccText =~ s{(.*?),\s$}{$1}gsmx; $BccText .= "."; $LayoutObject->Block( Name => 'Sent', Data => { %Param, Bcc => $BccText, }, ); my $Output = $LayoutObject->Header(); $Output .= $LayoutObject->NavigationBar(); $Output .= $LayoutObject->Output( TemplateFile => 'AdminEmail', Data => \%Param, ); $Output .= $LayoutObject->Footer(); return $Output; } } } # ------------------------------------------------------------ # # show mask # ------------------------------------------------------------ # # add rich text editor if ( $LayoutObject->{BrowserRichText} ) { # set up rich text editor $LayoutObject->SetRichTextParameters( Data => \%Param, ); } $Param{UserOption} = $LayoutObject->BuildSelection( Data => { $UserObject->UserList( Valid => 1, Type => 'Long', ), }, Name => 'UserIDs', Size => 6, Multiple => 1, Translation => 0, Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ), ); $Param{GroupOption} = $LayoutObject->BuildSelection( Data => { $GroupObject->GroupList( Valid => 1 ) }, Size => 6, Name => 'GroupIDs', Multiple => 1, Translation => 0, Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ), ); my %RoleList = $GroupObject->RoleList( Valid => 1 ); $Param{RoleOption} = $LayoutObject->BuildSelection( Data => \%RoleList, Size => 6, Name => 'RoleIDs', Multiple => 1, Translation => 0, Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ), ); $LayoutObject->Block( Name => 'Form', Data => { %Param, %Errors, }, ); if (%RoleList) { $LayoutObject->Block( Name => 'RoleRecipients', Data => \%Param, ); } if ( $Kernel::OM->Get('Kernel::Config')->Get('CustomerGroupSupport') ) { $LayoutObject->Block( Name => 'CustomerUserGroups', Data => \%Param, ); } my $Output = $LayoutObject->Header(); $Output .= $LayoutObject->NavigationBar(); $Output .= $Note; $Output .= $LayoutObject->Output( TemplateFile => 'AdminEmail', Data => { %Param, %Errors, }, ); $Output .= $LayoutObject->Footer(); return $Output; } 1;