HTMLメールを送信する方法


25

私たちのウェブサイトで取引のために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 ='no-reply@example.com';
    $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;
    }
}

フルHTMLページを渡していない
-GoodSp33d

回答:


22

前述の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インスタンスを実際のモジュールの名前に置き換えてから、モジュールを無効にしてから再度有効にして、変数が変更された後に動作するようにする必要があります。完全な例については、こちらの回答をご覧ください。さらに、drupal.orgのこのページは、私が最初にすべての情報を入手した場所からのものです。


2
私はあなたの指示に従った+あなたが今与えた完全な例すべてがうまくいっている...ありがとう
-mrcniceguy

7

Mime Mailモジュールは、ほぼ間違いなくあなたが探しているものです。

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

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

5
mimemailモジュールとメールシステムをダウンロードしました...上記のコードとしてmimemail関数をモジュールに呼び出すように説明してください。
-mrcniceguy

3

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

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

記録のために:私はモジュールの作成者および管理者です。


2

適切なHTMLを送信せず、H1タグとBタグのみを含めます。おそらく、フルHTMLタグも含める必要があります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


あなたのコメントのthx、私は@Dooshtaの例を使用し、またuが示唆するように適切なhtmlを追加しました。
-mrcniceguy

Doctypeを使用してHTMLを完全に検証しても問題はないと確信していますが、drupalを介してHTMLメールを送信する必要はありません。doctypeとhtmlタグを削除し、GmailとOutlookでメールが適切にレンダリングされました。ただし、Dooshtaの修正を適用することは非常に重要です。これらの変更を実装する前に、HTMLをまったく生成できませんでした。
doub1ejack

2

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

まず、Mime Mailモジュールをインストールして有効にします。使用方法の詳細な手順については、README.txtを参照してください。ショートバージョンをお届けします。

モジュールのMime Mailを有効にする必要があります。hook_enableまたはhook_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の代替としてメールに追加できますが、これは必須ではありません。

それでおしまい!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.