SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Extendendo
                              o Amavisd-New
                           YAPC::Brasil 2009, Rio de Janeiro, RJ




Friday, October 30, 2009
Quem?

                           Otávio Fernandes;

                           otaviof@gmail.com /
                           otavio.fernandes@locaweb.com.br

                           http://blog.emresumo.com

                           Líder, São Paulo Perl Mongers;



Friday, October 30, 2009
Minha História com Perl

                           Final de 2006;

                           Na época, as minhas principais linguagens
                           eram: C, C++ e Shell Script;

                           Estava construindo um appliance de Anti-
                           Spam... logo Amavisd-New;




Friday, October 30, 2009
Amavisd-New


                           A necessidade de entender como este
                           software funciona, foi o que me levou a
                           estudar e amar o Perl;

                           Perl, não existe melhor linguagem para o
                           tratamento de email;




Friday, October 30, 2009
O que ele é?

                           Interface entre o MTA e anti-spam/anti-
                           vírus;

                           Mail part decoder/unpacker;

                           Quarentenas (SQL/Local/Forward);

                           Log e Reporting para o SQL;



Friday, October 30, 2009
Quais as vantagens?
                           MUITAS features;

                           Extensível;

                           Respeita os padrões (SMTP, MIME, DSN, etc);

                           Tolerante a falhas:

                             Verifica o estado de cada operação;

                             Se houver erro, o email permanece com o
                             MTA;

Friday, October 30, 2009
Performance

                           Não é tão rápido quando se ele fosse escrito
                           em C;

                           Porem, permite escalar;

                           Trabalha com daemons (conforme o setup,
                           você usa mais instâncias);

                           200ms * N;



Friday, October 30, 2009
Performance Real:
                             1938 msgs/min




Friday, October 30, 2009
Arquitetura do Amavisd / Postfix




Friday, October 30, 2009
Afinal, como extender?

                           Todos os arquivos de configuração são scripts
                           Perl;

                           include_config_files("/usr/local/etc/
                           amavis_custom.pm") if ( -e "/usr/local/
                           etc/.pm" );

                           package   Amavis::Custom;


Friday, October 30, 2009
Métodos

                           new;

                           checks;

                           before_send;

                           after_send;

                           mail_done;



Friday, October 30, 2009
Exemplo




Friday, October 30, 2009
if ($must_exec_action) {
                               do_log( $cll, "CUSTOM: must_exec_action %d",
                                   $must_exec_action );

                               # redirecting to another recipient
                               $r->recip_addr_modified( $mail_rules->{mailRedirectTo} )
                                   if ( $mail_rules->{mailRedirectTo} );

                               # rejecting mail for sender
                               if ( $mail_rules->{mailReject} =~ /(true|1)/i )   {
                                   do_log( $cll, "CUSTOM: reject this mail for   '%s'",
                                       ( $mail_rules->{description} )
                                       ? $mail_rules->{description}
                                       : 'no_description'
                                   );
                                   for my $r ( @{ $msginfo->per_recip_data } )   {
                                       $r->add_contents_category( CC_BANNED, 0   )
                                           if !$r->bypass_banned_checks;
                                       $r->banning_reason_short(
                                           ( $mail_rules->{description} )
                                           ? $mail_rules->{description}
                                           : 'no_descption'
                                       );
                                       $r->banned_parts( ['MAIL'] );
                                   }
                                   $msginfo->add_contents_category( CC_BANNED,   0 );
                               }
                           }

Friday, October 30, 2009
Testes?


                           TDD;

                           Unit Tests;

                           Testes de Aceitação com Fixtures;




Friday, October 30, 2009
Perguntas?




Friday, October 30, 2009
Obrigado :-)




Friday, October 30, 2009

Mais conteúdo relacionado

Mais procurados

Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScriptLuis Vendrame
 
Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Lennon Manchester
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funçõesFellyph Cintra
 
Sistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptSistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptCarlos Melo
 

Mais procurados (7)

Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScript
 
Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções
 
Alta Concorrência com Postgres
Alta Concorrência com PostgresAlta Concorrência com Postgres
Alta Concorrência com Postgres
 
Sistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptSistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscript
 
SysAdmin para Devs - Siege
SysAdmin para Devs - SiegeSysAdmin para Devs - Siege
SysAdmin para Devs - Siege
 

Destaque

Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaan
Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaanTuotan-Olen olemassa. Sisältöä sosiaaliseen mediaan
Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaanPasi Siltakorpi
 
Wellspiration 3: Burning Fat
Wellspiration 3: Burning FatWellspiration 3: Burning Fat
Wellspiration 3: Burning FatYafa Sakkejha
 
Blogging and How It Complements Your Marketing Strategy
Blogging and How It Complements Your Marketing StrategyBlogging and How It Complements Your Marketing Strategy
Blogging and How It Complements Your Marketing StrategyKayak Online Marketing
 
Infectious september
Infectious septemberInfectious september
Infectious septemberRubén López
 
Stuart Bruce - #smib10 Presentation
Stuart Bruce - #smib10 PresentationStuart Bruce - #smib10 Presentation
Stuart Bruce - #smib10 Presentationsmibevents
 
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介ikikko
 
Smoking Hypnosis - Say No To The Cancer Sticks
Smoking Hypnosis - Say No To The Cancer SticksSmoking Hypnosis - Say No To The Cancer Sticks
Smoking Hypnosis - Say No To The Cancer SticksBiotherapy-clinic Usa
 
Reinforcement 4
Reinforcement 4Reinforcement 4
Reinforcement 4Sonia
 
Reinforcement unit 8
Reinforcement unit 8Reinforcement unit 8
Reinforcement unit 8Sonia
 
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...soranam
 
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russian
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russianStartup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russian
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russianYuriy Silvestrov
 
Technology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsTechnology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsBilal Ahmad
 

Destaque (20)

Wordpress33 base
Wordpress33 base Wordpress33 base
Wordpress33 base
 
169266 employers guide_to_nys_labor_laws_2014 (1)
169266 employers guide_to_nys_labor_laws_2014 (1)169266 employers guide_to_nys_labor_laws_2014 (1)
169266 employers guide_to_nys_labor_laws_2014 (1)
 
Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaan
Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaanTuotan-Olen olemassa. Sisältöä sosiaaliseen mediaan
Tuotan-Olen olemassa. Sisältöä sosiaaliseen mediaan
 
Truvada kaletra o maraviroc PrEp
Truvada kaletra o maraviroc PrEpTruvada kaletra o maraviroc PrEp
Truvada kaletra o maraviroc PrEp
 
Wellspiration 3: Burning Fat
Wellspiration 3: Burning FatWellspiration 3: Burning Fat
Wellspiration 3: Burning Fat
 
Blogging and How It Complements Your Marketing Strategy
Blogging and How It Complements Your Marketing StrategyBlogging and How It Complements Your Marketing Strategy
Blogging and How It Complements Your Marketing Strategy
 
Infectious september
Infectious septemberInfectious september
Infectious september
 
Stuart Bruce - #smib10 Presentation
Stuart Bruce - #smib10 PresentationStuart Bruce - #smib10 Presentation
Stuart Bruce - #smib10 Presentation
 
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介
渋谷の端っこでBTSをさけぶ ~とある会社の開発環境~の紹介
 
Smoking Hypnosis - Say No To The Cancer Sticks
Smoking Hypnosis - Say No To The Cancer SticksSmoking Hypnosis - Say No To The Cancer Sticks
Smoking Hypnosis - Say No To The Cancer Sticks
 
Reinforcement 4
Reinforcement 4Reinforcement 4
Reinforcement 4
 
Resursele Regenerabile (2)
Resursele Regenerabile  (2)Resursele Regenerabile  (2)
Resursele Regenerabile (2)
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Jak na web ... node
Jak na web ... nodeJak na web ... node
Jak na web ... node
 
Reinforcement unit 8
Reinforcement unit 8Reinforcement unit 8
Reinforcement unit 8
 
Trends in human mobility
Trends in human mobility Trends in human mobility
Trends in human mobility
 
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...
ProMAMA - Gimnastica si Masaj pentru Gravide, mamici si bebelusi, Lamaze, Ala...
 
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russian
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russianStartup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russian
Startup agile (Ciklum Agile Saturday - Dnipropetrovsk) - in russian
 
Technology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsTechnology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and Sports
 
Oracle Warehouse Builder - JUGM 2010
Oracle Warehouse Builder - JUGM 2010Oracle Warehouse Builder - JUGM 2010
Oracle Warehouse Builder - JUGM 2010
 

Extendendo o Amavisd-New com Perl

  • 1. Extendendo o Amavisd-New YAPC::Brasil 2009, Rio de Janeiro, RJ Friday, October 30, 2009
  • 2. Quem? Otávio Fernandes; otaviof@gmail.com / otavio.fernandes@locaweb.com.br http://blog.emresumo.com Líder, São Paulo Perl Mongers; Friday, October 30, 2009
  • 3. Minha História com Perl Final de 2006; Na época, as minhas principais linguagens eram: C, C++ e Shell Script; Estava construindo um appliance de Anti- Spam... logo Amavisd-New; Friday, October 30, 2009
  • 4. Amavisd-New A necessidade de entender como este software funciona, foi o que me levou a estudar e amar o Perl; Perl, não existe melhor linguagem para o tratamento de email; Friday, October 30, 2009
  • 5. O que ele é? Interface entre o MTA e anti-spam/anti- vírus; Mail part decoder/unpacker; Quarentenas (SQL/Local/Forward); Log e Reporting para o SQL; Friday, October 30, 2009
  • 6. Quais as vantagens? MUITAS features; Extensível; Respeita os padrões (SMTP, MIME, DSN, etc); Tolerante a falhas: Verifica o estado de cada operação; Se houver erro, o email permanece com o MTA; Friday, October 30, 2009
  • 7. Performance Não é tão rápido quando se ele fosse escrito em C; Porem, permite escalar; Trabalha com daemons (conforme o setup, você usa mais instâncias); 200ms * N; Friday, October 30, 2009
  • 8. Performance Real: 1938 msgs/min Friday, October 30, 2009
  • 9. Arquitetura do Amavisd / Postfix Friday, October 30, 2009
  • 10. Afinal, como extender? Todos os arquivos de configuração são scripts Perl; include_config_files("/usr/local/etc/ amavis_custom.pm") if ( -e "/usr/local/ etc/.pm" ); package Amavis::Custom; Friday, October 30, 2009
  • 11. Métodos new; checks; before_send; after_send; mail_done; Friday, October 30, 2009
  • 13. if ($must_exec_action) { do_log( $cll, "CUSTOM: must_exec_action %d", $must_exec_action ); # redirecting to another recipient $r->recip_addr_modified( $mail_rules->{mailRedirectTo} ) if ( $mail_rules->{mailRedirectTo} ); # rejecting mail for sender if ( $mail_rules->{mailReject} =~ /(true|1)/i ) { do_log( $cll, "CUSTOM: reject this mail for '%s'", ( $mail_rules->{description} ) ? $mail_rules->{description} : 'no_description' ); for my $r ( @{ $msginfo->per_recip_data } ) { $r->add_contents_category( CC_BANNED, 0 ) if !$r->bypass_banned_checks; $r->banning_reason_short( ( $mail_rules->{description} ) ? $mail_rules->{description} : 'no_descption' ); $r->banned_parts( ['MAIL'] ); } $msginfo->add_contents_category( CC_BANNED, 0 ); } } Friday, October 30, 2009
  • 14. Testes? TDD; Unit Tests; Testes de Aceitação com Fixtures; Friday, October 30, 2009