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가 언급했듯이 하나의 옵션은 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- 엔코딩하여 보냅니다.
  • 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_enablehook_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.