Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54433
  • 博文数量: 27
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 14:30
文章存档

2010年(27)

我的朋友

分类:

2010-04-12 15:51:15

----我的第一个正则表达式
一 自动发送求职信概要说明文档

这个脚本是用于求职人员向招聘人员的大批公司自动发送简历。

主要功能:
1 脚本的输入为按固定规格写成的文本文件
2 将写好的求职模板,中间读入求职者的个人简历,将其发送到某公司邮箱
3 循环处理读入-发送
4 同时再将求职者的个人简历以附件的形式发送

输入要求:
1 要求所有公司的邮箱地址、所求的职位顺序写入,并用空格分格,每个公司信息占一行
2 要求求职者的个人简历格式为html

技术难点:
1 用mail发送到邮箱
2 在模板中读入html格式的求职者简历
3 如何让邮件带附件
4 用固定字符串替换模板中匹配字符串

#!/usr/bin/perl

use strict;
use Mail::Sender;

my $sender = new Mail::Sender{
    smtp => 'smtp.126.com',
    from => 'uname1@126.com',
    auth => 'LOGIN',
    authid => 'uname1',
    authpwd => 'uname1_passwd',    
    subject => 'Application letter',
#    debug =>"< /home/cmx/regex/perldebug.txt",
};

open(LIST,'< ./list.txt') or die("");
while(<LIST>)
{    
    my @array=split / /,$_;
    my $mail_to=shift @array;
    my $job=shift @array;
    print $mail_to,$job;
    SendLetter($sender,$mail_to,$job);
}
close(LIST);

sub SendLetter(){
 my($sender,$mail_to,$job)=@_;
 $sender->OpenMultipart({
    smtp => 'smtp.126.com',
    from => 'uname1@126.com',
    to =>$mail_to,#$_[0],
    ctype => "text/html",
    encoding => "7bit",
 });
 print $mail_to;
 $sender->Body({encoding=>'utf8',charset=>'utf8',});
 $sender->SendEnc(<<"*END*");
 尊敬的公司领导:
    您好!
*END*
    
 open(IN,"< ./template.txt") or die("can't open file");
 #$job=$_[1];

 while(<IN>){            
   
$_ =~ s/=职位=/$job/g;
    $sender->SendEx($_);
 }
close IN;
open(IN, "< ./index.html") or die("can't open file");
 while(<IN>)
 {
   $sender->SendEx($_);
 }
    
 close IN;
 $sender->Attach({
    description=>'attach description',
    ctype=>'text/html',
    charset => 'utf8',    
    encoding=>'utf8',#

    disposition=>'attachment;filename="index.html";type="text/html"',
    msg=>'hello',
    file=>'index.html'
 });
} #sub sendletter

$sender->Close();

print $Mail::Sender::Error eq "" ? "send ok!\n" : $Mail::Sender::Error;


使用说明:
1 在与脚本的同目录下,有公司信息及申请职位的列表文件名为list.txt
2 有邮件主体模板文件template.txt
文件内容例如下:我叫MMM,我要应征贵公司的=职位=。
3 个人简历的html格式名为index.html
4 这里使用的是126邮箱,所以smtp服务器为smtp.126.com,若为其它的邮箱会有不同的smtp服务器
5 这里会有认证,所以要求输入来信邮箱的用户名和密码uname1,uname1_passwd

解决问题及过程:
一 刚开始时,使用了Net::SMTP_auth,发现了如下问题及解决办法
1 发现发过去的邮件没有主题也不能显示内容
解决办法:在各项后面加结束字符\n如From:To:等等
2 解决中文乱码问题
解决办法:用html格式输入时,增加Content-Type:text/plain;CharSet=utf-8
3 普通邮件需验证的,需要安装Net::SMTP Net::SMTP_auth
二 当要带附件时,发现大家建议使用MIME::Lite或Mail::Sender,于是改用MIME::Lite和Mail::Sender
1 安装模块MIME::Lite时,有对其它模块的依赖关系,所以之前又安装了其它模块Mail::Address,MIME::Types,File::Basename, MIME::Base64,MIME::QuotedPrint,Email::Date::Format,MIME::Types,Mail::Address,Date::Format,Date::Parse,Test::Pod
  在使用过程中,发现不太好用,而且可查的资料也少。
5 最后决定使用Mail::Sender,可以使用认证,还可以带附件,而且调试与出错信息也更确切一些

解释关键代码:
1 $_ =~ s/=职位=/$job/g;
  这是个用于匹配的正则表达式,功能是用$job中的字符串替换模板文件中的"
=职位="字符串,当然您如果有什么其它模板字符串,也可以如此替换。如=发送日期=等
2
$sender->SendEx($_);
  用以发送打开的html格式的个人简历,使得公司招聘人员不必打开附件,可以直接查看您的简历,这很重要噢
3
$sender->Attach({。。。});
  将简历以附件形式发送,以方便招聘人员对简历的下载和保存
4
print $Mail::Sender::Error eq "" ? "send ok!\n" : $Mail::Sender::Error;
  用以反馈邮件发送是否成功的状态信息

使用命令运行脚本:
perl autosendletter.pl

chmod +x autosendletter.pl
.autosendletter.pl

注:编译通过,使用的PERL的版本信息为
#perl -v
This is perl, v5.8.8 built for i386-linux-thread-multi



阅读(1678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~