« ポートレイト: 黒沢めい さん その1 | メイン | 風景: 桜木町にて »

2012年3月13日

Roundcube webmailer from,to,bcc等でのmimeencode 対応コード >>PHP 

実装として、Fromのところを文字コード変換しているが、mimeしてるわけでもないし、ちょっと微妙。

Miss implementation of Roundcube.
Does not match the notation RFC822 specification.

ということで作りました。本家がなおってくれるとえーねんけど。

尚、v0.7.0 を元にしているので、適宜修正を。
v0.7.2が出たみたい。試すのめんどう・・。


その1.
/lib/Mail に、RFC822.phpをダウンロードして入れてください。
(PEARのサイトから最新版をダウンロードして入れる)

その2.ソースに手を入れる。

/program/steps/mail/sendmail.inc

$headers['From'] = rcube_charset_convert($from_string, RCMAIL_CHARSET, $message_charset);

となっているものはコメントアウト

$headers['From'] = $from_string;
を追加。

本文と同じ文字コードにこの状態でいきなり変換しても後の処理が面倒になるだけなので、ここはそのまま格納するように。

SubjectのMimeEncodingの処理の後に、以下を追加

// From,To,CC,BCCの処理。一旦エンコードは戻す
// <> は trim されてること(同ファイル内にて処理されてるはず)を前提とする

require_once 'Mail/RFC822.php';
$rfc822 = new Mail_RFC822(NULL,'',NULL,FALSE,FALSE);

$ChangeTargets = array('From', 'To', 'Cc', 'Bcc');

foreach ($ChangeTargets as $target)
{
	if ($headers[$target] == '') { continue; }

	$addresses_tmp = $rfc822->parseAddressList($headers[$target], '', FALSE,FALSE,FALSE);
	$headers[$target] = '';

	$cnt = count($addresses_tmp);
	$i = 0;
	foreach ($addresses_tmp as $row)
	{
		$i++;
		if ($row->mailbox == '') { continue; }

		if ($row->personal != '')
		{
			$mtmp = mb_encode_mimeheader($row->personal ,
			    $message_charset, $head_encoding_mode, "\r\n", 8);
		}
		else
		{
			$mtmp = '';
		}

		$mtmp .= ' ' . '<' . $row->mailbox . '@' . $row->host . '>';
		
		$headers[$target] .= $mtmp;
		if ($i < $cnt)
		{
			$headers[$target] .= ",\r\n";
		}
	}

}

twitterこの記事をTwitterでみんなに教える。

投稿者 debizoh : 2012年3月13日 04:10



トラックバック

現在、この記事はトラックバックを受け付けておりません。


コメント

現在、この記事はコメントを受け付けておりません。