HTML e-postası nasıl gönderilir?


25

Web sitemizdeki anlaşmalar için kullanıcılara HTML e-postaları gönderecek basit bir modül oluşturuyorum.

Çok şey aradım, ancak Drupal için uygun bir çözüm bulamıyorum. Şimdi postaları gönderebilirim ama düz metin.

Drupal 7’de HTML e-postaları göndermek için adım adım prosedür nedir?

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;
    }
}

Tam HTML sayfasını
geçmiyorsunuz

Yanıtlar:


22

Geoff'in bahsettiği gibi bir seçenek Mime Mail modülünü kullanmak olacaktır, ancak özel modülünüzün bazı ekstra kodlarla HTML e-postalar göndermesini de sağlayabilirsiniz. Kısacası mail_systemdeğişkeni değiştirmeniz ve kendi uygulamanızı yazmanız gerekir MailSystemInterface. Bunun bir örneği aşağıdaki koddur.

'Mymodule.install' içinde:

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' içinde:

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;
  }
}

Modül örneklerini asıl modülünüzün adıyla değiştirmelisiniz, sonra değişkenlerin değişmesi için modülünüzün devre dışı bırakılması ve yeniden etkinleştirilmesi gerekir. Tam bir örnek için cevabımı buradan kontrol edebilirsiniz . Ek olarak , drupal.org'daki bu sayfa, başlangıçta tüm bilgileri nereden aldığımdan.


2
talimatlarını takip ettim + şimdi verdiğin tam örnek her şey çalışıyor ... Çok teşekkürler
mrcniceguy

7

Mime Mail modülü neredeyse kesinlikle aradığınız şey.

Bu bir Mime Mail bileşen modülüdür (diğer modüller tarafından kullanılmak üzere).

  • Kullanıcıların HTML e-posta almalarına izin verir ve diğer modüller tarafından kullanılabilir. Posta işlevi bir HTML mesaj gövdesini kabul eder, mime-endcodes eder ve gönderir.
  • HTML'de gömülü grafikler varsa, bu grafikler MIME kodludur ve bir mesaj eki olarak eklenir.
  • Temanızın stil sayfası dosyalarını temalı bir HTML mesajı formatında otomatik olarak ekleyerek sitenizin stilini benimser
  • Alıcının tercihi mevcutsa ve düz metni tercih ederse, HTML düz metne dönüştürülür ve olduğu gibi gönderilir. Aksi takdirde, e-posta, düz metin alternatifli temalı HTML olarak gönderilir.
  • Mesajları belirli bir posta tuşuyla tema yapmanızı sağlar.
  • CSS stillerini satır içi stil niteliklerine dönüştürür.
  • Gömülü resimler ve ekler içeren HTML e-postası göndermek için basit sistem eylemleri ve Kural eylemleri sağlar.

5
mimemail modülünü + mail sistemini indirdim ... lütfen mimemail işlevini yukarıdaki kod olarak modülüme çağırmamı rica ederim.
mrcniceguy

3

Swift Mailer modülüne de bakmak isteyebilirsiniz. Hem satır içi hem de normal eklerle (resimler veya dosyalar gibi) HTML e-postalar göndermenizi sağlar. Ayrıca, HTML e-postasını temel alarak otomatik olarak düz metin sürümleri oluşturabilir.

Ona bir göz atabilirsiniz http://www.drupal.org/project/swiftmailer

Kayıt için: Modülün yazarı ve sorumlusuyum.


2

Doğru HTML göndermiyorsunuz, yalnızca H1 etiketlerini ve B etiketlerini dahil ediyorsunuz, muhtemelen Tam HTML etiketlerini eklemeniz gerekir.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


ur yorum için thx, @Dooshta örneğini kullandım, u önerildiği gibi uygun html'yi de ekledim .. her şey çalışıyor.
mrcniceguy

Bir doctype kullanmanın ve HTML'yi tamamen doğrulamanın hiçbir zararı olmadığından eminim, ancak drupal yoluyla bir HTML e-postası göndermek için gerekli değildir. Ben sadece doctype & html etiketini ve Gmail & Outlook’ta iyi oluşturulmuş e-postayı kaldırdım. Bununla birlikte , Dooshta'nın düzeltmesini sağlamak çok önemlidir: bu değişiklikleri uygulamadan önce herhangi bir html üretemedim.
doub1ejack

2

Yukarıdaki cevapların hiçbiri benim için işe yaramadı, işte asıl soru benim işte.

Öncelikle, Mime Mail modülünü kurun ve etkinleştirin . OkuyabilirsinNasıl kullanılacağına dair tüm talimatlar README.txt dosyasını . Size kısa versiyonu vereceğim.

Modülünüz için Mime Mail'i etkinleştirmeniz gerekir. Bunu kullanarak hook_enableveya hook_update_Niçinde yapabilirsiniz example.install:

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

Gittiğinizde admin/config/system/mailsystem, modülünüz için yeni bir giriş eklendiğini göreceksiniz:

Örnek modül (send_gift key) sınıfı

MimeMailSystem

Artık herhangi bir text/htmlbaşlık belirtmenize gerek yok, Mime Mail bununla ilgileniyor. Yani buna ihtiyacın yok:

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

İsterseniz, $message['plaintext']HTML dışı bir alternatif için postanıza ekleyebilirsiniz , ancak bu gerekli değildir.

Bu kadar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.