Cara mengirim email HTML

25

Saya membuat modul sederhana yang akan mengirim email HTML kepada pengguna untuk penawaran di situs web kami.

Saya telah mencari banyak, tetapi saya tidak dapat menemukan solusi solusi yang tepat untuk Drupal. Sekarang saya dapat mengirim email tetapi teks biasa.

Apa prosedur langkah demi langkah untuk mengirim email HTML di Drupal 7?

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;
    }
}
mrcniceguy
sumber
Anda tidak melewati halaman Full HTML
GoodSp33d

Jawaban:

22

Seperti geoff disebutkan satu opsi adalah menggunakan modul Mime Mail, tetapi Anda juga dapat mengaktifkan modul khusus Anda untuk mengirim email HTML dengan beberapa kode tambahan. Singkatnya Anda harus mengubah mail_systemvariabel dan menulis implementasi Anda sendiri MailSystemInterface. Contohnya adalah kode berikut.

Di dalam '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);
}

Di dalam '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;
  }
}

Anda harus mengganti instance mymodule dengan nama modul Anda yang sebenarnya kemudian menonaktifkan dan mengaktifkan kembali modul Anda untuk mengubah variabel setelah mana hal-hal yang seharusnya berfungsi. Untuk contoh lengkap, Anda dapat memeriksa jawaban saya di sini . Selain itu halaman ini di drupal.org adalah dari mana saya awalnya mendapatkan semua informasi.

Madis
sumber
2
saya mengikuti instruksi Anda + contoh lengkap yang Anda berikan sekarang semuanya berfungsi ... Terima kasih banyak.
mrcniceguy
7

Modul Mime Mail hampir pasti apa yang Anda cari.

Ini adalah modul komponen Mime Mail (untuk digunakan oleh modul lain).

  • Ini memungkinkan pengguna untuk menerima email HTML dan dapat digunakan oleh modul lain. Fungsionalitas surat menerima badan pesan HTML, mime-endcode dan mengirimkannya.
  • Jika HTML memiliki gambar yang disematkan, gambar ini dikodekan dengan MIME dan disertakan sebagai lampiran pesan.
  • Mengadopsi gaya situs Anda dengan secara otomatis memasukkan file stylesheet tema Anda dalam format pesan HTML yang dapat disesuaikan
  • Jika preferensi penerima tersedia dan mereka lebih suka plaintext, HTML akan dikonversi menjadi teks biasa dan dikirim apa adanya. Kalau tidak, email akan dikirim dalam HTML yang dapat disesuaikan dengan alternatif plaintext.
  • Memungkinkan Anda untuk tema pesan dengan kunci surat tertentu.
  • Mengubah gaya CSS menjadi atribut gaya inline.
  • Memberikan tindakan sistem dan tindakan Aturan sederhana untuk mengirim email HTML dengan gambar dan lampiran yang disematkan.
geoff
sumber
5
Saya telah mengunduh modul mimemail + sistem email ... maukah Anda menjelaskan untuk memanggil fungsi mimemail ke modul saya seperti kode di atas.
mrcniceguy
3

Anda mungkin juga ingin melihat modul Swift Mailer. Ini memungkinkan Anda mengirim email HTML dengan lampiran inline dan reguler (seperti gambar atau file). Selain itu, ia juga mampu secara otomatis menghasilkan versi teks biasa berdasarkan email HTML.

Anda dapat melihatnya di http://www.drupal.org/project/swiftmailer

Sebagai catatan: Saya penulis dan pengelola modul.

sbrattla
sumber
2

Anda tidak mengirim HTML dengan benar, Anda hanya menyertakan tag H1 dan B, Anda mungkin perlu memasukkan tag HTML lengkap juga mulai dari
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

GoodSp33d
sumber
Terima kasih atas komentar Anda, saya menggunakan @Dooshta contoh, juga menambahkan html yang tepat seperti yang Anda sarankan .. semuanya berfungsi.
mrcniceguy
Saya yakin tidak ada salahnya menggunakan DOCTYPE & memvalidasi sepenuhnya HTML, tetapi tidak diperlukan untuk mengirim email HTML melalui drupal. Saya baru saja menghapus tag doctype & html dan email yang diberikan dengan baik di Gmail & Outlook. Namun , sangat penting untuk memiliki perbaikan Dooshta di tempat: sebelum saya menerapkan perubahan itu saya tidak dapat menghasilkan html sama sekali.
doub1ejack
2

Tidak ada jawaban di atas yang berfungsi untuk saya, jadi inilah pendapat saya tentang pertanyaan awal.

Pertama-tama, instal dan aktifkan modul Mime Mail . Anda dapat membaca README.txt untuk instruksi lengkap tentang cara menggunakannya. Saya akan memberikan versi singkatnya kepada Anda.

Anda perlu mengaktifkan Mime Mail untuk modul Anda. Anda dapat melakukan ini menggunakan hook_enableatau hook_update_Ndi example.install:

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

Ketika Anda pergi ke admin/config/system/mailsystemAnda akan melihat bahwa entri baru telah ditambahkan untuk modul Anda:

Kelas modul contoh (kunci send_gift)

MimeMailSystem

Sekarang Anda tidak perlu lagi menentukan text/htmlheader, Mime Mail menangani ini. Jadi Anda tidak membutuhkan ini:

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

Jika mau, Anda dapat menambahkan $message['plaintext']ke email Anda untuk alternatif non-HTML, tetapi ini tidak diperlukan.

Itu dia!

Wim Mostrey
sumber