Subject в листах

Знадобилось відправляти листи, повідомлення користувачам про різні події щодо їхніх замовлень. З тілом листа проблем не виникло: написав в хідері, що тіло в utf-8, 8bit encoded і все працює.

З Subject трохи складніше: в цьому полі листа все, що не ASCII, має бути закодоване згідно RFC 2047. Нижче - моя реалізація функції, що перетворює рядок в Q-encoding:

let encode_word init_str str =
  let rec convert dst s =
    match peek s with
      | Some c when ((127 > Char.code c) && (c != '=')) ->
          let new_str = sprintf "%c" c in
          junk s; convert (dst ^ new_str) s
      | Some c ->
          let new_str = sprintf "=%0X" (int_of_char c) in
          junk s; convert (dst ^ new_str) s
      | None -> dst
  and s = Stream.of_string str in
  convert init_str s

Користуйтесь на здоров'я :-)

P.S.: Юра, дякую за підказку, з '=' справді могло вийти некрасиво :-)

Сторінки

Про цей запис

This page contains a single entry by Микола Стрєбков published on August 22, 2009 4:35 AM.

Ліва ідея was the previous entry in this blog.

Правда. is the next entry in this blog.

Свіжі записи можна подивитись на головній сторінці. Все інше - в архіві.