EEフォーラム

メールフォームと文字エンコード等

 
Avatar
合計ポスト数: 5

EEを使ったサイトを作っています。わからないことがありまして、投稿させて頂きました。

・メールフォームについて
ユーザEメールモジュールを使うと、かんたんなメールフォームが作れて
とても便利ですが、もっと項目数を増やしたりしたいのですが、好きな
項目が作れるモジュールはあるかご存知でしょうか?

たとえば、下記のようなフォームを作りたいと思っています。
https://www.baycrews.co.jp/form/js-furniture/

・E-mailについて
また、E-メールも文字コードはすべてJIS(ISO-2022-JP)で送りたいのですが、これはソースを変更するしか無いですか?

Avatar
合計ポスト数: 14

・メールフォームについて
ユーザEメールモジュールを使うと、かんたんなメールフォームが作れてとても便利ですが、もっと項目数を増やしたりしたいのですが、好きな項目が作れるモジュールはあるかご存知でしょうか?

無料で英語のモヂュールになりますが、Freeform という自由にフォームを作れるモヂュールがあります:
http://www.solspace.com/software/detail/freeform/c/modules/
*個人で使ったことないので、ご参考までに

ユーザEメールモジュールを使いたければ、
http://expressionengine.com/docs/modules/email/contact_form.html
に “message[]"のアレーで複数のフィールドのフォームを作れるようです。

例のコードはこんな感じになります(英語フォーラムのここからです→ http://expressionengine.com/forums/viewthread/33298/ )

{exp:email:contact_form user_recipients="false" recipients="myemail@mydomain.com" return="http://www.meetyournewpuppy.com/index.php|Home Page"}

<p><label for="name"><strong><input type="hidden" name="message[]" value="Name: " />Your Name</strong></label><br />
<
input type="text" name="message[]" size="30" id="name" />

<
p><label for="from"><strong>Your Email</strong></label><br />
<
input type="text" id="from" name="from" size="30" maxlength="50" value="{member_email}" /></p>

<
input type="hidden" id="subject" name="subject" value="Contact Form Submission" />

<
p><label for="puppy"><strong><input type="hidden" name="message[]" value="Puppy: " />Which puppy are you interested in?</strong></label><br />
<
input type="text" name="message[]" size="30" maxlength="30" value="{segment_3}" id="puppy" /></p>

<
p><label for="phone"><strong><input type="hidden" name="message[]" value="Phone info: " />If you would like for us to respond by phoneplease give your phone number and the best times to call.</strong></label><br />
<
input type="text" name="message[]" size="30" maxlength="200" id="phone" /></p>

<
p><label for="comments"><input type="hidden" name="message[]" value="Comments: " /><strong>Comments</strong></label><br />
<
textarea id="message" name="message[]" rows="4" cols="40" id="comments"></textarea></p>

<
p><input name="submit" type='submit' value='SEND' /></p>

{/exp:email:contact_form}

・E-mailについて
また、E-メールも文字コードはすべてJIS(ISO-2022-JP)で送りたいのですが、これはソースを変更するしか無いですか?

emailタグに charset="iso-2022-jp" をいれると文字コードがそれで送れるはずです。説明リンクはここです→
http://expressionengine.com/docs/modules/email/contact_form.html#par_charset

Avatar
合計ポスト数: 10

こんにちは。
carset="ISO-2022-JP"とするだけでは、残念ながらだめでしたので、非常に場当たり的な解決ですが、EEmailを下記の部分だけ上書きしました。
PHPメール専用です。
システムのEメール構成の文字コードも"ISO-2022-JP"にしておいて下さい。

//var    $charset        = "ISO-2022-JP";                // Default char set: iso-8859-1 or us-ascii
    // "ISO-2022-JP"の時は、エンコーディングは7bitで
    var    $encoding        "7bit";                // Default bit depth (8bit = non-US char sets)
    //下記リストに無いと、自動的に8bitになるので、追加
    
var    $base_charsets    = array('iso-8859-1''us-ascii''ISO-2022-JP');

    function 
from($from$name '')
    
{
        
if (preg_match'/\<(.*)\>/'$from$match))
            
$from $match['1'];

        if (
$this->validate)
            
$this->validate_email($this->str_to_array($from));
            
        if (
$name != '' && substr($name01) != '"')
        
{
            
//差出人名を日本語化
            
$name mb_encode_mimeheader(mb_convert_encoding($name$this->charset"auto"));
        
}
            
        $this
->add_header('From'$name.' <'.$from.'>');
        
$this->add_header('Return-Path''<'.$from.'>');
    
}
    
    
function reply_to($replyto$name '')
    
{
        
if (preg_match'/\<(.*)\>/'$replyto$match))
            
$replyto $match['1'];

        if (
$this->validate)
            
$this->validate_email($this->str_to_array($replyto));    

        if (
$name == '')
        
{
            $name 
$replyto;
        
}

        
if (substr($name01) != '"')
        
{
            
//返信名を日本語化
            
$name mb_encode_mimeheader(mb_convert_encoding($name$this->charset"auto"));
        
}

        $this
->add_header('Reply-To'$name.' <'.$replyto.'>');
        
$this->replyto_flag TRUE;
    
}
    
    
function send_with_mail()
    
{    
        
//件名と本文を日本語化
        
$this->subject mb_encode_mimeheader(mb_convert_encoding($this->subject$this->charset"auto"));
        
$this->finalbody mb_convert_encoding($this->finalbody$this->charset"auto");
        
        if (
$this->safe_mode == TRUE)
        
{
            
if ( ! mail($this->recipients$this->subject$this->finalbody$this->header_str))
                return 
false;
            else
                return 
true;        
        
}
        
else
        
{
            
if ( ! mail($this->recipients$this->subject$this->finalbody$this->header_str"-f".$this->clean_email($this->headers['From'])))
                return 
false;
            else
                return 
true;
        
}
    }

本当は、モジュールかプラグインにした方がスマートなんですが、そこまでの技量が無かったので。
もっといい方法があったらお願いいたします。