How to add CC: email to incoming message?

This plugin allows you to report an issue in MantisBT by sending an email to a particular mail account

Moderators: Developer, Contributor

Post Reply
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

How to add CC: email to incoming message?

Post by mushu »

Mantis 2.18.0
EmailReporting 0.10.1

I added these two lines of code in mail_api.php but they don't seem to be doing anything in Mantis. We are trying to add a custom email address read from the body text of an incoming bug report via email. What am I doing wrong? The incoming email body text contains a line like this: blahblah Client someEmail@domain.com blahblah

Code: Select all

	private function parse_content( &$p_msg )
	{
		$this->show_memory_usage( 'Start Mail Parser' );
		$t_mp = new ERP_Mail_Parser( $this->_mp_options, $this->_mailbox_starttime );
		$t_mp->setInputString( $p_msg );
		if ( $this->_mail_add_complete_email )
		{
			$t_part = array(
				'name' => 'Complete email.txt',
				'ctype' => 'text/plain',
				'body' => $p_msg,
			);
		}

preg_match('/Client\s(.+)\@(.+)\s/', $t_part['body'], $pmatch);   # ADDED THIS HERE
if ($pmatch[1] !== "") { $t_email[ 'Cc' ] = $pmatch[1] . "@" . $pmatch[2]; }   # ADDED THIS HERE

		$p_msg = NULL;
		$t_mp->parse();
		$t_email[ 'From_parsed' ] = $this->parse_from_field( trim( $t_mp->from() ) );
		$t_email[ 'Reporter_id' ] = $this->get_user( $t_email[ 'From_parsed' ] );
		$t_email[ 'Subject' ] = trim( $t_mp->subject() );
		$t_email[ 'To' ] = $this->get_emailaddr_from_string( $t_mp->to() );
	#	$t_email[ 'Cc' ] = $this->get_emailaddr_from_string( $t_mp->cc() );   # COMMENTED THIS LINE OUT
		$t_email[ 'X-Mantis-Body' ] = trim( $t_mp->body() );
		$t_email[ 'X-Mantis-Parts' ] = $t_mp->parts();
Does Mantis even use the CC: field when it processes status changes in a ticket? Or should I add it to the TO: line after a comma?
SL-Gundam
Posts: 722
Joined: 06 Jul 2011, 14:17

Re: How to add CC: email to incoming message?

Post by SL-Gundam »

Your code is applied to raw mail content which is only set apart there for debug purposes incase you've enabled: https://www.mantisbt.org/wiki/doku.php/ ... lete_email

Apply your code a couple lines below that below the following line and use $t_email[ 'X-Mantis-Body' ]

Code: Select all

$t_email[ 'X-Mantis-Body' ] = trim( $t_mp->body() );
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

Now I get this error:

Code: Select all

SYSTEM WARNING: 'array_merge(): Argument #2 is not an array' in 'C:\MantisBT2180\plugins\EmailReporting\core\mail_api.php' line 1779
and that line of code in the plugin is this:

Code: Select all

$t_emails = array_merge( $p_email[ 'To' ], $p_email[ 'Cc' ] );
?
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

NEVERMIND I changed the line of code from this:

Code: Select all

if ("" !== $pmatch[1]) { $t_email[ 'Cc' ] =  $pmatch[1] . "@" . $pmatch[2] ; }
to this:

Code: Select all

if ("" !== $pmatch[1]) { $t_email[ 'Cc' ] = $this->get_emailaddr_from_string( $pmatch[1] . "@" . $pmatch[2] ); }
I hope it will work!
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

Bumping this topic because a while ago I noticed our incoming mantis emails were not being processed properly in the EmailReporting plugin, NOT due to the author of the awesome plugin.

It was code I had added in private function parse_content( &$p_msg ) just before the final "return" statement that scans the body of the email text looking for certain items and changing the subject line:

Code: Select all

if ( preg_match( '/\@salesforce.com/i', trim( $t_mp->sender() ) ) ) 
{
		$t_email[ 'Subject' ] = preg_replace( '/Service Request \#(\d+)/i', '(Ref:IN:\\1)', trim( $t_mp->subject() ) );
		$t_email[ 'Subject' ] = preg_replace( '/Incident \#(\d+)/i', '(Ref:IN:\\1)', trim( $t_mp->subject() ) );
		$t_email[ 'Return-Path' ] = 'servicedesk@domain.com';

		if ( preg_match('/Client\s(.+)\@(.+)/', $t_email['X-Mantis-Body'], $pmatch) ) {
		$t_email[ 'Cc' ] = $this->get_emailaddr_from_string( $pmatch[1] . "@" . $pmatch[2] );
	} 
	if ( preg_match('/Description\s+Subject:\s+(.+)\s+Body: /', $t_email['X-Mantis-Body'], $smatch) ) {
	$t_email[ 'Subject' ] = $smatch[1] . " - " . $t_email[ 'Subject' ];
} 
The problem is that suddenly there is nothing in X-Mantis-Body somehow OR maybe $t_mp->sender is empty?! I'm running Mantis 2.25.7 right now but think it may have happened a couple of versions back. I am also not using the github version of the EmailReporting plugin code, mine is 0.11.0-DEV.

Is this something in our mailer server or is it something that the Mantis code changed a version or two ago when generating emails?
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

Okay, after more testing you can mostly ignore the previous post above. Here is a command-line run of bug_report_mail:

Code: Select all

>php  bug_report_mail.php  Message.txt

Call to undefined function str_contains()
C:\MantisBT2257\plugins\EmailReporting\core\mail_api.php: 1185: ERP_mailbox_api - -> - add_monitors( <integer>5143, <array> { ['From_parsed'] => <array> { ['name'] => 'servicedesk@domain.com', ['email'] => 'servicedesk@domain.com', ['From'] => '"servicedesk@domain.com" <servicedesk@domain.com>' }, ['Reporter_id'] => 864, ['Subject'] => 'testing ticket for developer queue - (Ref:IN:00079613) Is now Assigned to Developers Queue', ['To'] => <array> { [0] => 'devbugs@domain.com', [1] => 'devbugs@domain.com' }, ['Cc'] => <array> { [0] => 'user1@domain.com' }, ['X-Mantis-Body'] => 'External Email


[Company logo]


Incident assignment change
Description

Assignment for Incident #00079613 is now Developers Queue.

Incident Details
Incident Number         00079613
Client  user1@domain.com
Category
Impact
Urgency
Priority
Description     Subject: testing ticket for developer queue

Body: Just drop into developer queue

===
My line 1185 is: $this->add_monitors( $t_bug_id, $p_email );

So I'm stuck at this point. Not sure why there is an error trying to add the monitors. Any suggestions?
atrol
Site Admin
Posts: 8366
Joined: 26 Mar 2008, 21:37
Location: Germany

Re: How to add CC: email to incoming message?

Post by atrol »

Code: Select all

Call to undefined function str_contains()
You might use an older PHP version.
The missing function is available since PHP 8.0, see https://www.php.net/manual/en/function.str-contains.php
Please use Search before posting and read the Manual
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

I thought mantis was still compatible with version 7, it's not any more?

Code: Select all

PHP 7.4.33 (cli) (built: Nov  2 2022 15:06:48) ( NTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
atrol
Site Admin
Posts: 8366
Joined: 26 Mar 2008, 21:37
Location: Germany

Re: How to add CC: email to incoming message?

Post by atrol »

The missing function is not called from MantisBT Core, its called from the plugin.
MantisBT 2.26.x requires PHP 7.2, 2.27.x will require 7.4.
Please use Search before posting and read the Manual
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

Okay so I added this function to the bug_report_mail.php file near the top and it seems to be working without errors now:

Code: Select all

public function str_contains(string $haystack, string $needle): bool
    {
        return strlen($needle) === 0 || strpos($haystack, $needle) !== false;
    }
Any reason to not just keep adding this until we're ready to upgrade php on the servers?
atrol
Site Admin
Posts: 8366
Joined: 26 Mar 2008, 21:37
Location: Germany

Re: How to add CC: email to incoming message?

Post by atrol »

I downloaded EmailReporting 0.10.1. from GitHub.
There is not any call of function str_contains in it.
Looks like you changed the original source code of the plugin.
Please use Search before posting and read the Manual
mushu
Posts: 349
Joined: 04 Jan 2017, 17:41

Re: How to add CC: email to incoming message?

Post by mushu »

atrol wrote: 21 Mar 2024, 21:29 I downloaded EmailReporting 0.10.1. from GitHub.
There is not any call of function str_contains in it.
Looks like you changed the original source code of the plugin.
No. The code came from the author himself, as I showed the version of the plugin above, which is higher than the github version because he gave me a direct download link previously. I didn't change the original code other than in a very few specific places and did not add any new function calls.
atrol
Site Admin
Posts: 8366
Joined: 26 Mar 2008, 21:37
Location: Germany

Re: How to add CC: email to incoming message?

Post by atrol »

You could contact the author and ask for a solution that works with PHP 7.x.
Be aware that PHP 7.4 is out of support, so it's certainly better if you upgrade to PHP 8.x https://www.php.net/supported-versions.php
Please use Search before posting and read the Manual
Post Reply