设为首页 收藏本站
查看: 1875|回复: 0

[经验分享] perl 邮件解析及数据库操作

[复制链接]

尚未签到

发表于 2017-5-18 13:12:38 | 显示全部楼层 |阅读模式
#!/usr/bin/perl
# file: readmail01.pl
# Figure 7.4: An readmail program


#-------------------------------------Sub decode_mimewords---------------------------------
sub decode_mimewords {
   my $encstr = shift;#省略@_,完整shift @_; #此处@_是所有传入参数组成的list
   my %params = @_;#hash
   my @tokens;#list
   $@ = '';         # error-return

   # Collapse boundaries between adjacent encoded words:
   $encstr =~ s{(\?\=)[\r\n \t]*(\=\?)}{$1$2}gs;#把$encstr 替换s///第一个()为$1第二个为$2
   pos($encstr) = 0;#返回最后一次模式匹配的位置
   ### print STDOUT "ENC = [", $encstr, "]\n";

   # Decode:
   my ($charset, $encoding, $enc, $dec);
   while (1) {
      last if (pos($encstr) >= length($encstr));#Perl提供了last、next和redo这几个语句来控制代码块内的执行流程。last语句退出代码块; next语句终止当前指令然后开始下一循环;而redo语句则重新开始循环代码块却并不重新计算条件语句
      my $pos = pos($encstr);            # save it

      # Case 1: are we looking at "=?..?..?="?
      if ($encstr =~   m{\G            # from where we left off..
                     =\?([^?]*)      # "=?" + charset +
                      \?([bq])       #  "?" + encoding +
                      \?([^?]+)      #  "?" + data maybe with spcs +
                      \?=           #  "?="
                     }xgi) {
         ($charset, $encoding, $enc) = ($1, lc($2), $3);
         $dec = (($encoding eq 'q') ? _decode_Q($enc) : decode_base64($enc));
         push @tokens, [$dec, $charset];#在数组末尾增加一个或多个元素。等价于slice (@array, @array, 0, elements);
         next;
      }

      # Case 2: are we looking at a bad "=?..." prefix?
      # We need this to detect problems for case 3, which stops at "=?":
      pos($encstr) = $pos;            # reset the pointer.
      if ($encstr =~ m{\G=\?}xg) {
         $@ .= qq|unterminated "=?..?..?=" in "$encstr" (pos $pos)\n|;
         push @tokens, ['=?'];
         next;
      }

      # Case 3: are we looking at ordinary text?
      pos($encstr) = $pos;            # reset the pointer.
      if ($encstr =~ m{\G            # from where we left off...
                   ([\x00-\xFF]*?   #   shortest possible string,
                    \n*)          #   followed by 0 or more NLs,
                   (?=(\Z|=\?))     # terminated by "=?" or EOS
                  }xg) {
         length($1) or die "MIME::Words: internal logic err: empty token\n";
         push @tokens, [$1];
         next;
      }

      # Case 4: bug!
      die "MIME::Words: unexpected case:\n($encstr) pos $pos\n\t".
         "Please alert developer.\n";
   }
   return (wantarray ? @tokens : join('',map {$_->[0]} @tokens));
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378833-1-1.html 上篇帖子: Perl实现批量安装NRPE客户端 下篇帖子: 神奇的perl-正则表达式(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表