Alanaktion/phproject

UTF8 encode error when receiving emails

bestkiller92 opened this issue · 6 comments

Hi, not sure of what this is, but i have an issue with incoming emails.
the subjects seems to be the only field affected, it tried to find the root cause but i couldn't:

"Test d'intégration #5" becomes " =?UTF-8?Q?Test_int=C3=A9gration_=233?= #5"

Could you please help me ?
This might be related to the email directly : i've seen in the header that the issue is already there, but if this is a new way of sending mails .... the app needs to be updated to right ?

I added this function at the beginning of the "cron/checkmail2.php" file :

function utf8_decode_email_subject($str)
{
	$wordStart = '=\?UTF-8\?Q\?';
	$wordEnd = '\?='; 
	$output = "";

	$output = preg_replace('#' . $wordStart . '#', '', $str);//Remove start of UTF8 encoding
	$output = preg_replace('#' . $wordEnd . '#', '', $output);//Remove end of tUTF8 encoding
	$output = quoted_printable_decode($output);//decode special chars
	$output = preg_replace('#_#', ' ', $output);//replace spacing

	return $output;
}

Then I declared the variable $subject a bit earlier in the code and replaced occurences of "$header->subject" by "$subject":
L144 >> $subject = utf8_decode_email_subject($header->subject); //early declaration
L150 >> $log->write(sprintf('No matching user, using default - From: %s; Subject: %s', $from, $subject));
L152 >> $log->write(sprintf('Skipping message, no matching user - From: %s; Subject: %s', $from, $subject));
L177 >> $subject = trim(preg_replace("/^((Re|Fwd?):\s)*/i", "", $subject));//previous declaration
L178 >> $issue->load(array('name=? AND deleted_date IS NULL AND closed_date IS NULL', $subject));
L192 >> 'name' => $subject,

This should do the trick... I'm currently testing on my server but the cron is only once an hour...
I will let you know if it works fine

It's working ;)

Dude, I have to say that i'm having so much fun right now !
I've added a new function with this fix allowing groups to define a "group mailbox", incoming mails to that address will generate issue assigned to the group and not to the user...
Testing... code is coming

Ok it's working :p But code is difficult to explain without a new fork... so ....

You basicaly have to reproduce the function used to set a manager in a group.
add a "mailbox" field in the related view.
Then update the check-mail script to take that information into account.

{
//No matching issue, creating a new issue
//if user is mailbox of the group, the issue is assigned to the group.
$is_group_mailbox = new \Model\Custom("user_group_user");
$is_group_mailbox->load(array("user_id = ? AND deleted_date IS NULL", $owner));
if($is_group_mailbox->mailbox){
$owner = $is_group_mailbox->group_id;
}
}

Resulting functionnality is quite interesting.

updated the following files:
cron\checkmail2.php
db\database.sql
app\dict\en.ini
app\routes.ini
app\controller\admin.php
app\view\admin\groups\edit.html