----我的第一个正则表达式
一 自动发送求职信概要说明文档
这个脚本是用于求职人员向招聘人员的大批公司自动发送简历。
主要功能:
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) |