TinyMail研究—邮件的表示与解析

TinyMail研究—邮件的表示与解析

                      

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:李先静<xianjimli at hotmail dot com>

更新时间:2007-4-17

 

TinyMail是一套针对移动设备设计的邮件系统框架,为了达到最大的灵活性,它采用了很多设计模式和先进的编程技术,让框架的每一部分都可以定制和配置。TinyMail流行的趋势非常明显,Nokia770/800GPE Phone Edition等项目中都使用了它。因为我们也要开发邮件系统,所以花了几天时间去研究它的实现,这里记录一些研究笔记,供有兴趣的朋友参考。本文介绍一下邮件的表示与解析。

 

TinyMail中,表示邮件的类以及它们之间的关系如下图所示:

 

CamelObject是所有类的基类,它提供类型系统的实现、引用计数、signal机制等基本功能。

 

CamelDataWrapper 它提供了对数据对象的包装,可以调用set_mime_type/ get_mime_type去设置/获取数据对象的类型,可以调用write_to_stream/ decode_to_stream把数据对象写到流中去,也可以调用construct_from_stream从流中构造数据对象。这些函数都是虚函数,可以在子类中重载。

 

CamelMedium 它提供了邮件的基本雏形:邮件头和邮件体。可以调用add_header/ set_header/ remove_header/ get_header/ free_headers/ get_headers去操作邮件头,可以调用set_content_object /get_content_object去存取邮件体。

 

CamelMimePart 它代表Mime邮件的一个Part,每个Part都有自己的邮件头来描述Content-TypeContent-ID等信息,也都有自己的邮件体(通常是一个文件),所以它继承了CamelMedium接口。

 

CamelMimeMessage 它代表一个完整的Mime邮件,它没有自己的虚函数,只是实现了CamelMedium定义的接口函数,并包装了一些实用的函数。

 

CamelMultipart 它代表multipart/*类型的Mime-Message的邮件体,可以调用add_part/add_part_at/remove_part/remove_part_at去增删其中的CamelMimePart对象,可以调用get_part/get_number去访问中的CamelMimePart对象。

 

CamelMultipartSigned/CamelMultipartEncrypted 它们实现了CamelMultipart,用于表示mutlipart/signedmutlipart/encrypted类型的MultiPart邮件。

 

下面是一个创建邮件的例子:

create_mail.c

 

#include <string.h>

#include <camel/camel.h>

 

int main(int argc, char* argv[])

{

    CamelMimeMessage *msg;

    CamelInternetAddress *addr;

    const char *text;

    CamelMultipart *mp;

    CamelMimePart *part;

    CamelStream* stream;

 

    msg = camel_mime_message_new();

    camel_mime_message_set_subject(msg, "Talking to myself again");

 

    addr = camel_internet_address_new();

    camel_internet_address_add(addr, "NotZed", "notzed@somewhere.com");

    camel_mime_message_set_from(msg, addr);

    camel_address_remove(CAMEL_ADDRESS(addr), -1);

 

    camel_internet_address_add(addr, "NotZed", "notzed@somewhere.else.com");

    camel_mime_message_set_recipients(msg, "To", addr);

    camel_object_unref(addr);

 

    mp = camel_multipart_new();

    camel_data_wrapper_set_mime_type(CAMEL_DATA_WRAPPER(mp), "multipart/alternative");

    camel_multipart_set_boundary(mp, NULL);

    camel_multipart_set_preface(mp, "This is a message in MIME format.  Get with the decade/n");

    camel_multipart_set_postface(mp, "/nSome useless after-message text you should never see/n/n");

 

    part = camel_mime_part_new();

    text = "Hello NotZed,/nTalking to yourself again?/n/n  NotZed/n";

    camel_mime_part_set_content(part, text, strlen(text), "text/plain");

    camel_multipart_add_part(mp, part);

    camel_object_unref(part);

 

    part = camel_mime_part_new();

    text = "<html>/n<body>/nHello NotZed,<br>/nTalking to yourself again?<br>/n&nbsp;&nbsp;NotZed<br>/n</body>/n</html>/n";

    camel_mime_part_set_content(part, text, strlen(text), "text/html");

    camel_multipart_add_part(mp, part);

    camel_object_unref(part);

 

    camel_medium_set_content_object(CAMEL_MEDIUM(msg), CAMEL_DATA_WRAPPER(mp));

 

    stream = camel_stream_fs_new_with_name("./test.eml", O_CREAT|O_RDWR, 0664);

    camel_data_wrapper_write_to_stream(CAMEL_DATA_WRAPPER(msg), stream);

 

    camel_object_unref(msg);

    camel_stream_close(stream);

 

    return 0;

}

 

Makefile:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

FLAGS=-g `pkg-config --libs --cflags camel-lite-1.2  glib-2.0`

 

all:

    gcc $(FLAGS) create_mail.c -o create_mail.exe

clean:

    rm -f *.exe

                  

 

邮件的解析是由CamelMimeParser完成,它采用了基于栈的下推自动机实现。其状态转换如下图所示:

 

参考资料:

http://www.go-evolution.org

 

~~end~~

 
内容概要:本文研究了基于DPWMA调制正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应速度不足等问题。通过采用有源中点箝位(ANPC)三电平逆变器拓扑,结合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术和电网电压前馈控制,构建了一套一体化的高性能并网控制体系。该体系不仅优化了逆变器的开关动作机制,改善了输出电压电流的谐波特性,而且通过精确的相位同步和扰动补偿,显著提高了系统的动态响应能力和抗扰性能。仿真结果显示,所提出的控制策略能有效降低并网谐波含量,提升锁相精度系统动态稳定性,确保在复杂电网工况下的高质量稳定并网。 适合人群:具备一定电力电子基础知识和仿真技能的研发人员,尤其是从事新能源发电、储能系统、柔性输电等领域研究的专业人士。 使用场景及目标:①研究和开发高性能并网逆变器,特别是针对大功率、高电能质量要求的应用场景;②探索如何通过先进的调制和控制策略来提高并网逆变器对电网扰动的适应性和响应速度;③为相关领域的学术研究和技术开发提供理论依据和实践指导。 阅读建议:建议读者结合实际的仿真软件(如MATLAB/Simulink)进行实践操作,以便更好地理解和掌握文中提到的各种控制策略的具体实现方法。同时,鼓励读者关注最新的研究成果和发展趋势,不断深化对该领域的认识。
摘要 在全球生态环境问题日益严峻、公众环保参意愿持续提升的背景下,传统环保志愿者招募管理模式存在信息传播零散、供需对接不畅、管理效率低下等痛点,制约了环保公益事业的规模化发展。为解决上述问题,响应生态保护数字化发展需求,本课题设计实现“守望自然”环保志愿者招募管理网站,通过数字化手段打通环保组织志愿者的服务链路,对推动环保公益规范化、高效化发展具有重要的现实意义实践价值。 该网站采用B/S架构前后端分离模式开发,前端基于Vue架构建组件化响应式界面;后端以Java为开发语言,采用Spring Boot框架搭建应用,搭配MyBatis作为持久层框架,数据库选用MySQL并遵循第三范式设计7个以上核心数据表。系统涵盖用户管理员两大核心角色,实现了闭环式环保志愿服务功能:用户端支持注册登录、个人信息管理、活动查询报名、环保知识学习、社区互动、问题反馈及客服咨询等功能,满足用户全流程参需求;管理员端具备用户管理、用户审核、招募活动信息发布管理、环保知识内容管理、问题反馈处理、证书模板管理、多维度数据可视化分析及社区内容监管等功能,全面支撑环保组织运营管理。开发过程中集成了Token身份认证、MD5密码加密、ECharts数据可视化等关键技术,融入活动智能推荐、数据驱动决策等创新设计,确保系统功能完备性实用性。 经功能测试、性能测试及安全测试验证,系统运行稳定可靠,具有良好的易用性、安全性和可扩展性,能够高效满足环保组织的用户招募管理需求用户的多元化参需求,有效降低环保组织运营成本,提升用户参体验,为环保理念传播公益事业发展提供有力的数字化支撑。 关键词:环保志愿者;招募管理系统;Spring Boot;Vue;数据可视化
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值