私は、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;
}
}
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のページは、私が最初にすべての情報を取得した場所からのものです。
Mime Mail moduleはほぼ間違いなくあなたが探しているものです。
これはMime Mailコンポーネントモジュールです(他のモジュールで使用するため)。
- これにより、ユーザーはHTML電子メールを受信でき、他のモジュールで使用できます。メール機能は、HTMLメッセージ本文を受け入れ、mime-endcodeして送信します。
- HTMLにグラフィックが埋め込まれている場合、これらのグラフィックはMIMEエンコードされ、メッセージの添付ファイルとして含まれます。
- テーマ設定可能なHTMLメッセージ形式でテーマのスタイルシートファイルを自動的に含めることにより、サイトのスタイルを採用します
- 受信者の設定が利用可能であり、プレーンテキストを好む場合、HTMLはプレーンテキストに変換され、そのまま送信されます。それ以外の場合、メールはプレーンテキストの代替を含むテーマ化可能なHTMLで送信されます。
- 特定のメールキーでメッセージのテーマを設定できます。
- CSSスタイルをインラインスタイル属性に変換します。
- 画像と添付ファイルが埋め込まれたHTMLメールを送信するための簡単なシステムアクションとルールアクションを提供します。
上記の答えはどれもうまくいかなかったので、元の質問に対する私の見解を示します。
まず、 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以外の代替を指定できますが、これは必須ではありません。
それでおしまい!
Swiftメーラーモジュールを確認することもできます。これにより、インラインと通常の添付ファイル(画像やファイルなど)の両方を含むHTML電子メールを送信できます。さらに、 HTML電子メールに基づいてプレーンテキストバージョンを自動的に生成します。
あなたはそれを見ることができます http://www.drupal.org/project/swiftmailer
記録のために:私はモジュールの作者であり、メンテナーです。
適切なHTMLを送信しておらず、H1タグとBタグのみを含めています。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">