Cách gửi email HTML


25

Tôi đang tạo một mô-đun đơn giản sẽ gửi email HTML cho người dùng để giao dịch trong trang web của chúng tôi.

Tôi đã tìm kiếm rất nhiều, nhưng tôi không thể tìm ra giải pháp phù hợp cho Drupal. Bây giờ tôi có thể gửi thư nhưng văn bản đơn giản.

Quy trình từng bước để gửi email HTML trong Drupal 7 là gì?

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

Bạn không vượt qua trang HTML đầy đủ
GoodSp33d

Câu trả lời:


22

Giống như geoff đã đề cập, một tùy chọn sẽ là sử dụng mô-đun Mime Mail, nhưng bạn cũng có thể kích hoạt mô-đun tùy chỉnh của mình để gửi e-mail HTML với một số mã bổ sung. Nói tóm lại, bạn cần thay đổi mail_systembiến và viết triển khai của riêng bạn MailSystemInterface. Một ví dụ về điều đó là đoạn mã sau.

Bên trong '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);
}

Bên trong '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;
  }
}

Bạn sẽ phải thay thế các phiên bản mymodule bằng tên mô-đun thực tế của mình sau đó vô hiệu hóa và kích hoạt lại mô-đun của bạn để thay đổi biến sau khi mọi thứ sẽ hoạt động. Để có một ví dụ đầy đủ, bạn có thể kiểm tra câu trả lời của tôi ở đây . Ngoài ra , trang này trên drupal.org là từ nơi tôi ban đầu nhận được tất cả thông tin từ đó.


2
tôi đã làm theo hướng dẫn của bạn + ví dụ hoàn chỉnh mà bạn đã đưa ra bây giờ mọi thứ đang hoạt động ... Cảm ơn bạn rất nhiều.
mrcniceguy

7

Mô-đun Mime Mail gần như chắc chắn là những gì bạn đang tìm kiếm.

Đây là mô-đun thành phần Mime Mail (được sử dụng bởi các mô-đun khác).

  • Nó cho phép người dùng nhận email HTML và có thể được sử dụng bởi các mô-đun khác. Chức năng thư chấp nhận nội dung thư HTML, mã hóa và gửi nó.
  • Nếu HTML có đồ họa nhúng, những đồ họa này được mã hóa MIME và được bao gồm dưới dạng tệp đính kèm thư.
  • Chấp nhận kiểu trang web của bạn bằng cách tự động bao gồm các tệp biểu định kiểu của chủ đề của bạn ở định dạng tin nhắn HTML có thể sử dụng được
  • Nếu tùy chọn của người nhận có sẵn và họ thích văn bản gốc, HTML sẽ được chuyển đổi thành văn bản thuần túy và được gửi như hiện trạng. Nếu không, email sẽ được gửi bằng HTML có thể sử dụng được bằng một thay thế văn bản gốc.
  • Cho phép bạn gửi tin nhắn chủ đề với một mailkey cụ thể.
  • Chuyển đổi các kiểu CSS thành các thuộc tính kiểu nội tuyến.
  • Cung cấp các hành động hệ thống đơn giản và các hành động Quy tắc để gửi email HTML với các hình ảnh và tệp đính kèm được nhúng.

5
tôi đã tải xuống mô-đun mimemail + hệ thống thư ... bạn sẽ vui lòng giải thích để gọi chức năng mimemail đến mô-đun của tôi như mã ở trên.
mrcniceguy

3

Bạn cũng có thể muốn xem mô-đun Swift Mailer. Nó cho phép bạn gửi e-mail HTML với cả tệp đính kèm nội tuyến và thông thường (như hình ảnh hoặc tệp). Hơn nữa, nó cũng có khả năng tự động tạo các phiên bản văn bản đơn giản dựa trên e-mail HTML.

Bạn có thể xem nó http://www.drupal.org/project/swiftmailer

Đối với hồ sơ: Tôi là tác giả và người duy trì mô-đun.


2

Bạn không gửi HTML phù hợp, bạn chỉ bao gồm các thẻ H1 và thẻ B, có lẽ bạn cần bao gồm các thẻ Full HTML cũng bắt đầu từ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


Thx cho bình luận của bạn, tôi đã sử dụng ví dụ @Dooshta, cũng đã thêm html thích hợp như bạn đề xuất .. mọi thứ đều hoạt động.
mrcniceguy

Tôi chắc chắn không có hại gì khi sử dụng một loại tài liệu & xác thực HTML hoàn toàn, nhưng không bắt buộc phải gửi email HTML thông qua drupal. Tôi vừa xóa thẻ doctype & html và email được hiển thị tốt trong Gmail & Outlook. Tuy nhiên , điều rất quan trọng là phải có bản sửa lỗi của Dooshta: trước khi tôi thực hiện những thay đổi đó, tôi không thể tạo bất kỳ html nào cả.
ngờ1ejack

2

Không có câu trả lời nào ở trên làm việc cho tôi, vì vậy đây là câu hỏi ban đầu của tôi.

Trước hết, cài đặt và kích hoạt mô-đun Mime Mail . Bạn có thể đọc README.txt để biết hướng dẫn đầy đủ về cách sử dụng nó. Tôi sẽ cung cấp cho bạn phiên bản ngắn.

Bạn cần kích hoạt Mime Mail cho mô-đun của mình. Bạn có thể làm điều này bằng cách sử dụng hook_enablehoặc hook_update_Ntrong example.install:

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

Khi bạn đi đến admin/config/system/mailsystembạn sẽ thấy rằng một mục mới đã được thêm cho mô-đun của bạn:

Lớp mô-đun ví dụ (khóa send_gift)

Hệ thống MimeMailS

Bây giờ bạn không cần phải chỉ định bất kỳ text/htmltiêu đề nào nữa, Mime Mail sẽ giải quyết vấn đề này. Vì vậy, bạn không cần điều này:

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

Nếu bạn muốn, bạn có thể thêm $message['plaintext']vào thư của mình để thay thế không phải HTML, nhưng điều này là không bắt buộc.

Đó là nó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.