Ethnaで日本語メール送信

2008/09/27 未分類 spok

EthnaでQdmailを使用する

EthnaでQdmailを使用すれば、テキストメール、HTMLメールはもちろん、デコメも簡単に送信できます。

サンプルコード(アクション)

qd_send_mail型

class Mailtest_Action_Index extends Mailtest_ActionClass
{
        function perform()
        {

            include_once('qdmail.php');

            $regist_user='田中';

            $ethna_mail =& new Ethna_MailSender($this->backend);
            $content = $ethna_mail->send(null,
                'testmail.tpl',
                array('username' => $regist_user));

            qd_send_mail('html',
                'address@mail456.com',
                'えすなテスト',
                $content,
                'from@exaple.com',
                null
            );
                return;
        }
}

OOP型

            include_once('qdmail.php');

            $regist_user='田中';

            $ethna_mail =& new Ethna_MailSender($this->backend);
            $content = $ethna_mail->send(null,
                'testmail.tpl',
                array('username' => $regist_user));

       $mail -> html($content);
       $mail -> to( 'address@example,com' );
       $mail -> from( 'from@example,com' );
       $mail -> subject( 'えすなテスト' );

            return;
        
要は$contentにメールの内容を入れてしまえば、後は普通のQdmailの使い方と同じです。
テンプレートの例示
template/ja/mail/mailtest.tpl
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp" />
<link rel="stylesheet" href="{$config.url}css/ethna.css" type="text/css" />
</head>
<body>

<div id="header">
    <h1>Mailtest</h1>
</div>

<div id="main">
    <h2>メールテスト</h2>
    <p>こんにちは、{$username}さん</p>
</div>

<div id="footer">
    Powered By <a href="http://ethna.jp">Ethna</a>-{$smarty.const.ETHNA_VERSION}.
</div>

</body>
</html>

参考

Ethna メール送信サンプル

推奨する環境

2008/09/27 未分類 spok
最も問題の出にくい、推奨する環境は以下の通りです。

PHP4の場合、PHP 4.4.9
PHP5の場合、PHP 5.2.6以降

スクリプト文字コード:UTF-8に統一
送信方法:SMTP (Qdsmtpと組み合わせ)

ドコモで添付ファイル削除

2008/09/26 未分類 spok

ドコモ(docomo)で添付ファイル削除

ドコモにデコメや添付ファイル付きメールを送信した場合、「添付ファイル削除」となってしまう場合があります。
原因のひとつとしてお使いのSMTP送信サーバーとドコモのサーバーがSMTPコネクションを上手に終了できないことがあるようです。

回避方法

mail()関数を使わずに、SMTP送信にて試行してみてください。
この場合のSMTPサーバーは一般のプロバイダを指定し、SMTP AUTH認証にて接続するのがいいと思います。
(要:Qdsmtp

ヘッダーが見えてしまう等

2008/09/26 未分類 spok

本文が消えてしまう。携帯でうまく受信できない。ヘッダーが見えてしまう

改行コードの変更
Qdmailでは、RFCに従い、ヘッダーの改行コードをCRLFとしています。
しかし、sendmailではないメール送信サーバー、特にqmailを使用している場合、改行コードがCRLFではなくLFのみでないと誤動作することがあるようです。
0.8.6.a以降のバージョンで、自動認識を装備していますが、当該自動認識がうまく働かない場合もあるかと思います。
その場合は、強制的に改行コードをLFのみにするように変更してみてください。
変更の仕方
ソースコードの50行目付近に、Line Feedの項目があり、var $LFC = ”¥r¥n”と定義している行があります。
ソース内を「$LFC」で検索してみてください。
それを半角で”¥n”と変更してみてください。¥rを削除するということです。
逆変更
Qdmailが、送信サーバーがqmailであると自動判別したけれども、それが逆効果になってしまう場合は、qmail判定した時であっても、CRLFにしておくことが必要になります。
上記のvar $LFC の定義の1行下に、var $LFC_Qmailの設定があります。これを半角で”¥r¥n”に変更してみてください。
ユーザーのソースコード内での改行コードの変更
$mail には Qdmailオブジェクト(インスタンス)が入っているものとします。
$mail -> lineFeed( ”¥n” ); //(実際は半角にて)
とすると、上記のようにQdmailのソースコードを変更しなくても、ユーザースクリプトサイドで、強制的に改行コードをLFのみにできます。CRLFに再変更するには、
$mail -> lineFeed( ”¥r¥n” );
としてください。
現在の改行コードを得るには、
$mail -> lineFeed();
と引数を省略すれば、返り値で現在の改行コードを返します。

なぜかテキストが文字化けする

mb_language('ja');
mb_internal_encoding('UTF-8');
UTF-8は例示ですので、お使いの文字コードにしてください。

または
php.ini にて
mbstring.language = Japanese
を設定してみてください。