`
flyfy1
  • 浏览: 74412 次
  • 性别: Icon_minigender_1
  • 来自: Singapore
社区版块
存档分类
最新评论

用PHP来自动发带附件的Email

阅读更多

我在做CS1010(Programming Methodology)的Tutor,其中一个任务是给学生作业判分,然后把判分的结果发给学生。

 

学生作业在我电脑里面folder的结构是:题号->学生学号->题目;其中题目为C code,有时候有其它的Tutor用Word判分之后会把结果发给我。

 

为了保护学生隐私,我需要分别给每个学生发送他的成绩,附上他的批改过的作业作为附件。于是,我可以用电脑来做这个重复而且麻烦的事情。

 

这里用的是PHP,以及它的Pear组件中的Pear_mail (用来发送email),和pear_mime(用来给email加入附件)。学生的email就是学生学号@学校网址。

 

code见下(这里居然不能用PHP后缀作为附件!应该是因为怕上传上去自动执行PHP吧~)。我觉得这是一次很好的Programming Practice——把一些编程技巧拿来解决实际问题。

 

 

<?php
// basic email settings
require_once "Mail.php";
require_once "Mail/mime.php";
$params = array(
    'host' => "ssl://smtp.gmail.com",
    'port' => "465",
    'auth' => true,
    'username'   => "something@gmail.com", // CONFIG your username comes here
    'password'   => "Your Password", // CONFIG and your password
);
$from = "something@gmail.com";     // CONFIG your email address
$cc = "something@gmail.com";    // CONFIG the cc address    -- put your address so that you can confirm that the email has been sent successfully
$subject = "[CS1010] PE Mark";
$body =                         // CONFIG: the message you want to pass to your student, it's in the HTML format
    "<p>Please Check the attachment(the word file) for your PE1 Mark. I didn't mark your PE but the graders are following the same scheme. If you have any problem with it, please email me.</p></br><p>Regards, </p> <p>Your Name</p>";

// Generate the location array
$markLoc = "../PE_DG4";     // CONFIG: the file location of the folder storing ex1, ex2, ...

$regEx = "/^ex\\d$/";
$regMatrix = "/^[au]\\d+$/";
$regWord = "/\\.docx$/";
$regCProg = "/\\.c$/";

// location str:
$loc = array();

$fileNameArr = array($markLoc);
foreach(scandir($markLoc) as $exName){
    if(!preg_match($regEx,$exName)) continue;
    array_push($fileNameArr,$exName);
    foreach(scandir(implode("/",$fileNameArr)) as $matrixNum){
        if(!preg_match($regMatrix,$matrixNum))  continue;
        if(!array_key_exists($matrixNum,$loc))  $loc[$matrixNum] = array();
        array_push($fileNameArr,$matrixNum);
        foreach(scandir(implode("/",$fileNameArr)) as $file){
            if(preg_match($regWord,$file)){
                array_push($fileNameArr,$file);
                $loc[$matrixNum][] = implode("/",$fileNameArr);
                array_pop($fileNameArr);
            } else if(preg_match($regCProg,$file)){
                array_push($fileNameArr,$file);
                $loc[$matrixNum][] = implode("/",$fileNameArr);
                array_pop($fileNameArr);
            }
        }
        array_pop($fileNameArr);
    }
    array_pop($fileNameArr);
}

// then send out emails to each specific student

foreach($loc as $matrix => $files){
    $message = new Mail_mime();
    $message->setHTMLBody($body);

    // add in attachment here
    foreach($files as $file){
        $message->addAttachment($file);
    }
    $to = $matrix."@nus.edu.sg";
    
    $headers = array(
        'From'  => $from,
        'Reply-to' => $from,
        'To'    => $to,
        'Cc'    => $cc,
        'Subject'   => $subject,
    );

    $msgContent = $message->get();
    $msgHeader = $message->headers($headers);

    $smtp = Mail::factory('smtp',$params);
    $mail = $smtp->send($to.",".$cc,$msgHeader,$msgContent);

    if(PEAR::isError($mail)){
        echo "Error: ".$mail->getMessage()."\n";
    } else{
        echo "Message Sent Successfully to: $to\n";
    }
}

?>
1
1
分享到:
评论

相关推荐

    vb 发带附件邮件

    本篇将详细介绍如何使用VB6编写程序来实现无控件发送带附件的邮件。 首先,我们需要了解SMTP(Simple Mail Transfer Protocol),它是互联网上用于发送电子邮件的标准协议。VB6本身并不直接支持SMTP,所以我们需要...

    使用PHP mail()函数发送有附件的邮件

    有时发带附件的邮件不想引用邮件类库,使用PHP mail()函数发送有附件的邮件

    测试QT邮件发送的程序,附件功能没有

    本文将深入探讨如何使用Qt进行邮件发送,特别是关于附件的实现,这对于开发者来说是重要的知识点。 首先,让我们了解一下Qt库。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面和移动设备应用...

    手机Email 可发附件 带联系人列表

    发上来是来求助的:在sun和nokia的模拟器上能正常发邮件,但是到了手机上就显示不能解析主机名(could not resolve...在电脑上可以发带附件的邮件。发图片啦文本啦肯定是木有问题的~自带简单的联系人列表方便填写收件人

    利用Python发送邮件或发带附件的邮件

    在Python编程中,发送邮件是一项常见的任务,尤其对于自动化脚本和系统通知而言。本文将详细介绍如何使用Python发送文本邮件和带有附件的邮件,以163邮箱为例,因为当前163邮箱要求使用客户端授权码而非密码进行验证...

    Python脚本实现自动发带图的微博

    主要介绍了Python脚本实现自动发带图的微博的相关资料,需要的朋友可以参考下

    Twip Twitter API proxy in PHP.带图片说明

    它允许开发者通过PHP来间接访问Twitter的API,从而绕过某些限制或者进行特定的处理。由于标题提及“带图片说明”,我们可以推测此项目可能包含如何使用图像资源或展示API请求结果的示例。 【描述】:“Twip,Twitter...

    .net发送邮件(含附件,完整源码代介绍)

    在.NET框架中,发送电子邮件是一项常见的任务,尤其在企业级应用和自动化流程中。这篇文章将深入探讨如何使用C#编程语言实现.NET发送邮件功能,包括添加附件和验证附件的大小及格式。 首先,我们需要了解SMTP...

    excel群发邮件

    本机安装outlook后,配置上群发邮箱,下载附件执行宏即可群发邮件,操作简单。

    发带图片的贴子教程1.zip

    发带图片的贴子教程1

    QT 编写 邮件 工具 定时发送 自动发送 QT源代码 学习资料

    5,我自己添加了,定时发送邮件,自动添加附件的功能,如果对你没有用可以屏蔽掉 6,特别注意发带有附件的邮件,会导致进程在发送,但提示没有成功,我自己添加了延迟,代码中也有注释,也许还有其他问题,我还没有...

    手把手教学实现仿微信发带图片朋友圈的UI设计

    本文将深入讲解如何实现一个仿微信发带图片朋友圈的UI设计。 首先,我们需要理解UI设计的基本原则。用户界面(UI)设计的目标是创建一个直观、易用且吸引人的环境,使用户能够有效地与应用程序进行交互。在设计仿...

    capl实现crc校验码计算.pdf

    CRC通过计算一个固定长度的校验码来检测数据传输过程中可能发生的错误。CRC算法的核心在于选择一个合适的多项式作为生成多项式,通过对原始数据进行多项式除法运算,得到的余数即为CRC校验码。 #### 二、CAPL语言...

    1028-天风证券-爱美客-300896-22Q3营收yoy+5515%,高净值产品厚积薄发带.pdf

    首先,从基本数据来看,爱美客的A股总股本为216.36百万股,流通A股股本为88.58百万股,总市值和流通市值分别为948.479亿和388.3015亿。每股净资产为25.66元,资产负债率仅为4.27%,显示出较强的财务实力和较低的财务...

    织梦系统每日新闻归档插件

    "每日新闻-5.7gbk发带分页的每日文章归档"这一文件名暗示了这个插件是针对织梦5.7版本的GBK编码环境开发的,支持分页显示每日的新闻条目,这对于大型网站来说尤其重要,因为它能优化用户体验,避免一次性加载过多...

    防论坛广告插件 for Discuz!7.0 GBK.rar

    机制:发帖没满一定数不能发带URL的帖子 下载附件 解压放到include目录下 如果你的这两个文件修改过了 请按下面的修改 很多人都说找不到$discuz_action=11或者12的 其实7.0只是多打了半角空格 改为了$discuz_...

    山东省莒县第四协作区2020学年九年级英语上学期第二次月考试题 人教新目标版.doc

    13. must belong to表示“一定属于”,语气较强,根据后文她非常喜欢粉色,推测发带一定是Linda的,选A。 14. 首次见面时应握手,be supposed to do sth.表示“应该做某事”,选B。 以上题目涉及的英语知识点涵盖...

Global site tag (gtag.js) - Google Analytics