Thanks! -- Jesse Gumm Owner, Sigma Star Systems 414.940.4866 || sigma-star.com || @jessegumm On Jun 30, 2014 8:55 AM, "can2nac" <[email protected]> wrote:
> ok, will do little later as i'm still on 0.8.7 build, not time for update > to latest CB version right now, but i'll try until the end of the week. > > On Sunday, June 29, 2014 6:10:37 PM UTC+4, Jesse Gumm wrote: >> >> This looks useful. >> >> Could you out this together in a pull request on github? >> >> -- >> Jesse Gumm >> Owner, Sigma Star Systems >> 414.940.4866 || sigma-star.com || @jessegumm >> On Jun 29, 2014 7:07 AM, "can2nac" <[email protected]> wrote: >> >>> Hi all, >>> >>> i had a task to implement dkim, cc and bcc with boss_mail. Below is a >>> solution. >>> >>> 1. Update gen_smtp to the latest version. You will need >>> mimemail:encode\2; >>> 2. Run Mimeail with your app or each time with boss_mail. I >>> added code:ensure_loaded(mimemail), in init\0 in main_init; >>> 3. Change boss_mail and recompile CB >>> >>> %depricated by can2nac Jun 24 2014 >>> %send_message(App, FromAddress, ToAddress, Action, HeaderFields, >>> Variables, Options, Callback) -> >>> % BodyFun = fun() -> build_message(App, Action, HeaderFields, >>> Variables, Options) end, >>> % gen_server:call(boss_mail, {deliver, FromAddress, ToAddress, >>> BodyFun, Callback}). >>> >>> %proper cc and bcc processing, added by can2nac Jun 24 2014 >>> send_message(App,FromAddress,ToAddress,Action,HeaderFields,Variables,Options,Callback) >>> -> >>> Recipients=[ToAddress]++lists:flatmap(fun(T)->string:tokens( >>> proplists:get_value(T,HeaderFields,[]),";")end,["Cc","Bcc"]), >>> _HeaderFields=lists:keydelete("Bcc",1,HeaderFields), >>> BodyFun=fun()->build_message(App,Action,_HeaderFields, >>> Variables,Options)end, >>> lists:foreach(fun(_ToAddress)->gen_server:call(boss_mail,{ >>> deliver,FromAddress,_ToAddress,BodyFun,Callback})end,Recipients). >>> >>> build_message(App, Action, HeaderFields, Variables, Options) -> >>> ContentLanguage = proplists:get_value("Content-Language", >>> HeaderFields), >>> EffectiveAction = proplists:get_value(template, Options, Action), >>> Attachments = proplists:get_value(attachments, Options, []), >>> {MimeType, MessageBody} = build_message_body_attachments(App, >>> EffectiveAction, Variables, Attachments, ContentLanguage), >>> MessageHeader = build_message_header(HeaderFields, MimeType), >>> %added by can2nac Jun 24 2014 START >>> DKIMOptions= >>> case file:read_file(boss_env:get_env(dkim_certificate_file,undefined)) >>> of >>> {ok,PemBin}->[{dkim,boss_env:get_env(dkim_options,[])++[{ >>> private_key,{pem_plain,PemBin}}]}]; >>> {error,_}->[] >>> end, >>> %added by can2nac Jun 24 2014 END >>> %[MessageHeader, "\r\n", convert_unix_newlines_to_dos(MessageBody)]. >>> %removed by can2nac Jun 24 2014 >>> mimemail:encode({list_to_binary(MimeType),<<>>,MessageHeader,[] >>> ,list_to_binary(convert_unix_newlines_to_dos(MessageBody))},DKIMOptions).%added >>> by can2nac Jun 24 2014 >>> >>> build_message_header(HeaderFields, DefaultMimeType) -> >>> MessageID = case proplists:get_value("Message-ID", HeaderFields) of >>> undefined -> smtp_util:generate_message_id(); >>> Other -> Other >>> end, >>> ContentType = proplists:get_value("Content-Type", HeaderFields, >>> DefaultMimeType), >>> Date = proplists:get_value("Date", HeaderFields, >>> erlydtl_dateformat:format("r")), >>> AllHeaders = [{"Date", Date}, {"Content-Type", ContentType}, >>> {"MIME-Version", "1.0"}, {"Message-ID", MessageID} | >>> HeaderFields], >>> [{list_to_binary(K),list_to_binary(V)}||{K,V}<-AllHeaders].%added >>> by can2nac Jun 24 2014 >>> %add_fields(AllHeaders, [], []).%removed by can2nac Jun 24 2014 >>> >>> %depricated by can2nac Jun 24 2014 END >>> %add_fields([], _, Acc) -> >>> % lists:reverse(Acc); >>> %add_fields([{Key, Value}|Rest], Seen, Acc) -> >>> % case proplists:get_value(Key, Seen) of >>> % undefined -> >>> % add_fields(Rest, [Key|Seen], [[Key, ": ", Value, "\r\n"] | >>> Acc]); >>> % _ -> >>> % add_fields(Rest, Seen, Acc) >>> % end. >>> >>> 4. Add in boss_config following lines >>> {dkim_certificate_file,"priv/dkim.pem"}, >>> {dkim_options,[{s,<<"some_txt_record_prefix">>},{d,<<"domain.com.">>}]}, >>> %TXT some_txt_record_refix._dkim.domain.com >>> >>> Only open certificates were implemented, password protected were not >>> implemented. >>> You can generate DKIM here %%http://www.port25.com/ >>> support/domainkeysdkim-wizard/ >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "ChicagoBoss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> Visit this group at http://groups.google.com/group/chicagoboss. >>> To view this discussion on the web visit https://groups.google.com/d/ >>> msgid/chicagoboss/b88fa990-46a7-4c91-bfc4-5b8f75c2795c% >>> 40googlegroups.com >>> <https://groups.google.com/d/msgid/chicagoboss/b88fa990-46a7-4c91-bfc4-5b8f75c2795c%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "ChicagoBoss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > Visit this group at http://groups.google.com/group/chicagoboss. > To view this discussion on the web visit > https://groups.google.com/d/msgid/chicagoboss/bf9ef6e5-d35c-40db-97fb-3169ae0f13c1%40googlegroups.com > <https://groups.google.com/d/msgid/chicagoboss/bf9ef6e5-d35c-40db-97fb-3169ae0f13c1%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "ChicagoBoss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. Visit this group at http://groups.google.com/group/chicagoboss. To view this discussion on the web visit https://groups.google.com/d/msgid/chicagoboss/CAPTXyXcPMAxMt57L_JN56UBrALd%3D-xgJiMrb_-BHE3kmXhti-Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
