web-dev-qa-db-ja.com

HTMLメールを送信する方法

私は、Webサイトでの取引のためにHTMLメールをユーザーに送信する単純なモジュールを作成しています。

何度も検索しましたが、Drupalに適したソリューションが見つかりません。これでメールを送信できますが、プレーンテキストです。

Drupal 7)でHTMLメールを送信するための段階的な手順とは何ですか?

function example_form_submit( $form,&$form_state) {
    $friend_email=$form_state['values']['friend_email'];
    $mailto =$friend_email;  //gift to a friend
    $mailfrom ='[email protected]';
    $subject = "another message for  HTML email from example.com";
    $body="<h2 style='font-size:28px;color:red;'>Hello EMAIL, i here i want to be <b>bolded</b></h2>";
    if (drupal_mail('example', 'send_gift', $mailto, language_default(),$params,$mailfrom,TRUE)) {
        drupal_set_message(t('Your gift was sent successfully!!!'));
    }
    else {
        drupal_set_message(t('<font color="red">Error occured while sending your mail!!!</font>'));
    }


/****hook_mail*/
function example_mail($key,&$message,$params) {
    $language = $message['language'];
    switch ($key) {
        case 'send_gift':
            $message['subject']=t($params['subject'], $var, $language->language);
            $message['body'][]=$params['body'];
            $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
        break;
    }
}
25
mrcniceguy

Geoffが述べたように、1つのオプションはMime Mailモジュールを使用することですが、カスタムモジュールを有効にして、追加のコードを含むHTML電子メールを送信することもできます。つまり、mail_system変数を変更し、MailSystemInterfaceの独自の実装を作成する必要があります。その例は次のコードです。

'mymodule.install'内:

function mymodule_enable() {
  $current = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  $addition = array('mymodule' => 'MymoduleMailSystem');
  variable_set('mail_system', array_merge($current, $addition));
}

function mymodule_disable() {
  $mail_system = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  unset($mail_system['mymodule']);
  variable_set('mail_system', $mail_system);
}

「mymodule.module」内:

class MymoduleMailSystem extends DefaultMailSystem {
  public function format(array $message) {
    $message['body'] = implode("\n\n", $message['body']);
    $message['body'] = drupal_wrap_mail($message['body']);
    return $message;
  }
}

Mymoduleのインスタンスを実際のモジュールの名前に置き換えてから、モジュールを無効にしてから再度有効にして、変数が変更された後に機能するようにする必要があります。完全な例については、私の答え here を確認してください。さらに this drupal.orgのページは、私が最初にすべての情報を取得した場所からのものです。

22
Madis

Mime Mail moduleはほぼ間違いなくあなたが探しているものです。

これはMime Mailコンポーネントモジュールです(他のモジュールで使用するため)。

  • これにより、ユーザーはHTML電子メールを受信でき、他のモジュールで使用できます。メール機能は、HTMLメッセージ本文を受け入れ、mime-endcodeして送信します。
  • HTMLにグラフィックが埋め込まれている場合、これらのグラフィックはMIMEエンコードされ、メッセージの添付ファイルとして含まれます。
  • テーマ設定可能なHTMLメッセージ形式でテーマのスタイルシートファイルを自動的に含めることにより、サイトのスタイルを採用します
  • 受信者の設定が利用可能であり、プレーンテキストを好む場合、HTMLはプレーンテキストに変換され、そのまま送信されます。それ以外の場合、メールはプレーンテキストの代替を含むテーマ化可能なHTMLで送信されます。
  • 特定のメールキーでメッセージのテーマを設定できます。
  • CSSスタイルをインラインスタイル属性に変換します。
  • 画像と添付ファイルが埋め込まれたHTMLメールを送信するための簡単なシステムアクションとルールアクションを提供します。
7
geoff

上記の答えはどれもうまくいかなかったので、元の質問に対する私の見解を示します。

まず、 Mime Mail モジュールをインストールして有効にします。 README.txt を使用して、使用方法の詳細を確認できます。ショートバージョンをあげます。

モジュールでMime Mailを有効にする必要があります。これを行うには、hook_enablehook_update_Nまたはexample.installを使用します。

function example_enable() {
  mailsystem_set(array(
    'example_send_gift' => 'MimeMailSystem',
  ));
}

admin/config/system/mailsystemに移動すると、モジュールに新しいエントリが追加されていることがわかります。

モジュール(send_giftキー)クラスの例

MimeMailSystem

これで、text/htmlヘッダーを指定する必要がなくなり、Mime Mailがこれを処理します。したがって、これは必要ありません。

$message['headers']['Content-Type'] = ...

必要に応じて、メールに$message['plaintext']を追加してHTML以外の代替を指定できますが、これは必須ではありません。

それでおしまい!

3
Wim Mostrey

Swiftメーラーモジュールを確認することもできます。これにより、インラインと通常の添付ファイル(画像やファイルなど)の両方を含むHTML電子メールを送信できます。さらに、 HTML電子メールに基づいてプレーンテキストバージョンを自動的に生成します。

あなたはそれを見ることができます http://www.drupal.org/project/swiftmailer

記録のために:私はモジュールの作者であり、メンテナーです。

3
sbrattla

適切なHTMLを送信しておらず、H1タグとBタグのみを含めています。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2
GoodSp33d