PHPMailer:Featured email transfer class for PHP

PHPMailer 是一个很有用的 PHP 发送邮件的类。它支持使用 smtp 服务器发送邮件,同时支持 Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier 等邮件服务器。SMTP服务器的话还支持验证,多SMTP发送(不过不太清楚有什么用).邮件发送可以包括多个TO, CC, BCC and REPLY-TO,支持text和HTML两种邮件格式,可以自动换行,支持各种格式的附件及图片,自定义邮件头等基本的邮件功能。

由于 PHP 中只包含了一个 mail 函数,所以 PHPMailer 是对其很大的增强,相信是可以满足很多人的需求的,呵呵。其主要包括两个类文件:用于实现发送邮件功能的 class.phpmailer.php 和 smtp 实现的 class.smtp.php 。然后还有可以实现多种错误输出的文件,以及很详细的文档。软件发布遵循 LGPL 协议。

使用也很简单,看下面的例子就明白了:

  1. require(“class.phpmailer.php”);
  2. $mail = new PHPMailer();
  3. $mail->IsSMTP(); // send via SMTP
  4. $mail->Host = “smtp1.site.com;smtp2.site.com”; // SMTP servers
  5. $mail->SMTPAuth = true; // turn on SMTP authentication
  6. $mail->Username = “jswan”; // SMTP username
  7. $mail->Password = “secret”; // SMTP password
  8. $mail->From = “[email protected]”;
  9. $mail->FromName = “Mailer”;
  10. $mail->AddAddress(“[email protected]”,”Josh Adams”);
  11. $mail->AddAddress(“[email protected]”); // optional name
  12. $mail->AddReplyTo(“[email protected]”,”Information”);
  13. $mail->WordWrap = 50; // set word wrap
  14. $mail->AddAttachment(“/var/tmp/file.tar.gz”); // attachment
  15. $mail->AddAttachment(“/tmp/image.jpg”, “new.jpg”);
  16. $mail->IsHTML(true); // send as HTML
  17. $mail->Subject = “Here is the subject”;
  18. $mail->Body = “This is the <b>HTML body</b>”;
  19. $mail->AltBody = “This is the text-only body”;
  20. if(!$mail->Send())
  21. {
  22. echo “Message was not sent <p>”;
  23. echo “Mailer Error: ” . $mail->ErrorInfo;
  24. exit;
  25. }
  26. echo “Message has been sent”;

详见 PHPMailer 的主页

DotClear 1.2.1 发布

DotClear 1.2.1 今天发布了。

新版本增加了四种语言支持,包括中文(我前几天提交上去的)。

新版本增加了一个新的Themes,一个防垃圾留言的插件,可通过拖拉分类及链接设置其排序,及其它小的改动。大的变化不多。

作者 Olivier 说:Ce n’est pas une révolution, juste une évolution dans le bon sens – et une préparation à la révolution,意思是:It is not a revolution, just an evolution in the good direction – and a preparation with the revolution。另外 Olivier 还说下一版本可能会支持 tag 等其它新的功能。

下面是其ChangeLog:

  • 4 new languages :Chinese (by Tsing) German (by Hans and Frederik) Italian (by Federico) Spanish (by Gromka)
  • Translation of help files (by Tehu)
  • New default theme (by Maurice.)
  • New $PLUGIN_HEAD variable in which a plugin can specify optional HTML headers.
  • Indexes in MySQL tables.
  • Improved MySQL plugin with backup and restore (by Pep.)
  • Javascript event which alert when leaving an unsaved entry.
  • Drag and drop sorting on categories and links.
  • Javascript fixes.
  • New wiki2xhtml with macro support.
  • Added help files in all languages but Chinese.
  • New dcCustomTitle() template function which display $dc_custom_title global variable (useful for plugins.)
  • Added a template function to display an admin link if user is logged in.
  • Fixed bug #15 about $_GET (yeah!)
  • Added “short feeds” option.
  • Fixes in Atom and RSS feeds.
  • New global variable $dc_args which returns URL arguments.
  • Moved sessions to a database table.
  • Removed SQL cache.

附:dotClear的英文模板文件下载

The Acid2 Browser Test & browsehappy

这是在 The Web Standards Project 上看到的。

The Second Acid Test 是一个测试浏览器针对HTML,CSS,PNG等的支持的网页。其测试内容有:

  • Transparent PNGs — The eyes are encoded as transparent PNGs.
  • The object element — The eyes of the face are attached to an object element. Being able to use object (which can have alternative content) is one of the oldest requests from web designers.
  • Absolute, relative and fixed positioning — Being able to position elements accurately is important for advanced page layouts.
  • Box model — The original Acid test focused on the CSS box model. Acid2 continues in this fine tradition by testing ‘height’, ‘width’, ‘max-width’, ‘min-width’, ‘max-height’ and ‘min-height’.
  • CSS tables — There is nothing wrong with table layouts. It is a powerful layout model which makes sense on bigger screens. However, the table markup is troublesome as it ties the content to these screens. Therefore, being able to specify table layouts in CSS is important.
  • Margins — CSS defines accurate algorithms for how margins around elements should be calculated.
  • Generated content — The ability to add decorations and annotations to Web pages without modifying the markup has long been requested by authors.
  • CSS parsing — Acid2 includes a number of illegal CSS statements that should be ignored by a compliant browser.
  • Paint order — We test that overlapping content is painted in the right order. This is not a feature in itself, but a requirement for other features to work correctly.
  • Line heights — The Acid2 test checks a few key parts of the CSS inline box model, upon which any standards-compliant Web page depends.
  • Hovering effects — One of the elements in the face changes color when you hover over it. Which one?

详见:Acid2: the guided tour

我用Firefox,Opera,IE试了一下,都达不到其给出的参考图像的效果。比较起来以IE最差,Firefox最好,呵呵。

另外 The Web Standards Project 建的的另一个网站 browsehappy.com 也是一个很好玩的网站。它是一个指点人们如何选择网页浏览器的网站。网站的头条是:Internet Explorer can make your computer unsafe,然后里面收集了选用除IE外的其它各种浏览器(Mozilla,Firefox,Opera,Safari)的人们的使用心得。值得一看。

Updated 2005-4-29

Acid2 Goes on Safari

使Zend Studio支持中文

Zend Studio算是最好用的PHP的IDE了,不过对中文支持一直不是特别好。

Windows下Zend Studio只要选择好中文字体(DialogInput的效果似乎比较好)就可以很好的支持中文了。

但是在Linux下就没有中文字体可选。之前以为没办法,今天才发现Zend Studio的字体都放在它自带的jre下,只要把中文字体拷到jre/lib/fonts就OK了。呵呵。

不过我在使用中还发现有一个问题。就是用Zend Studio编辑过的文件采用utf-8编码的话,其它编辑器打开有时会乱码,有时不会。而其它编辑器如EditPlus保存过的utf-8编码的文件中的中文信息在Zend Studio中打开也经常会乱码。没搞明白原因。

About

Personal Stuff

tsing:现居中国北京,为某门户网站技术工程师,代码农民,从事 LAMP 相关的技术工作。

感兴趣的技术关键字:perl php python ruby ror twisted web.py mako xmpp linux cfengine puppet sphinx apache nginx mysql moose drizzle dsl lua cluster distribution cloud merb thrift disco hadoop hbase hypertable kfs gluster mogilefs memcached squid varnish gearman rabbitmq moose

Contact Me

自己找一下

This Site

目前比较懒,更新频率大致为一年几篇。。。想八卦请google: tsing

dotClear trackback乱码问题的解决

刚才突然想起这个dotClear的trackback一直有乱码问题,于是修改了一下dotClear的代码,其实很简单,就是修改一下dotclear对于utf-8编码的判断机制,让它总是以utf-8接收和发送trackback就可以了。原来的机制是dotClear要判断对方编码机制,但是对于其它blog程序来说,没有提供编码的消息,因此就dotClear就会出错,将本来已经是utf-8的信息又进行了一次utf-8编码。

在本机用wordpress和dotClear双向测试,已经没有问题了。往玄之又玄那儿发了一个trackback也没问题了。

不过没有对其它的blog程序进行过测试,但是估计只要trackback内容是utf-8编码的话,应该都没有问题。

以下是修改方法:

1.将inc/classes/class.blog.php 第2171行:

$do_utf8 = false;

修改为:

$do_utf8 = true;

2.将tb.php 的第127行:

if (dc_encoding == 'UTF-8' && (empty($_REQUEST['utf8']) || $_REQUEST['utf8'] != 1))

修改为:

if (dc_encoding == 'UTF-8' && !empty($_REQUEST['utf8']) && $_REQUEST['utf8'] != 1)

具体行数不同版本可能不同,我用的是通过Subversion下载的dotClear的最新代码。不过差别也不是很大。

解决掉这个问题后,这个dotClear就更优秀了,呵呵。

相关内容:

使 XHTML Strict 支持target 标签

XHTML 1.0 Strict 之后就不支持 target 标签了。像如下形式的代码:

<a href="somewhere.html" target="_blank">link</a>

就通不过 W3C 的验证。

因此要使得在xhtml的页面中能实现target功能,在新窗口中打开链接,有以下方法:

1.用javascript实现,如通过以下代码:

<a href="http://www.example.com" onclick="window.open(this.href); return false">link</a>

找到了一个很好的进行此种处理的JS,详见:Unobtrusive Popup Windows

2. 自己扩展XHTML 1.1的DOCTYPE 。

比如我现在使用的这个DTD:

 <!DOCTYPE html PUBLIC "-//BLOG.JIANQING.NET//DTD XHTML 1.1 Target //EN"  "http://blog.jianqing.net/themes/theme2005/xhtml11-target.dtd">

就是扩展了标准的XHTML 1.1 ,xhtml11-target.dtd 文件是这样的:

%xhtml11.mod; %xhtml-target.mod;

这样就使得target 标签有效了。

3.还有一个扩展方式就是在标准的XHTML DOCTYPE后加一句:

<!ATTLIST a target CDATA #IMPLIED>

即使用如下的DOCTYPE声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  "http://www.w3.org/tr/xhtml11/DTD/xhtml11.dtd"   <!ATTLIST a target CDATA #IMPLIED>

这样也就可以使target标签有效了。不过在浏览器中会显示: ]> 这两个字符。要消除这个问题,必须使用正确的MIME来传送XHTML,XHTML的MIME类型应该设为application/xhtml+xml。只是修改Content-Type是没用的

具体可参看此文:Serving up XHTML with the correct MIME type

该文还提出了如何通过PHP来发送application/xhtml+xml的MIME类型的XHTML。

dotClear也提供了这个功能。它能根据判断浏览器是否支持application/xhtml+xml的MIME类型自动选择是否发送application/xhtml+xml类型MIME。

updated 2005-4-15:

w3cn.org上看到了一篇同样讨论这个问题的文章:target=”_blank”不符合标准?

updated 2005-5-15:

从 IBM 的 developerWorks 上看到了一篇关于 XHTML 2.0 的文章:Linking in XHTML 2.0。文章介绍了在 XHTML 2.0 中对于链接的规范。

文章的中文版本:XHTML 2.0 中的链接

请更换tsing’s Blog的订阅地址

我的blog最早是放在http://tsing.vonye.com上,那是桑甚先生免费提供的空间。

不过因为我在宿舍访问太慢,后来干脆自己买了个域名,然后用了一个国内的空间一直到现在。

我从bloglines看到有很多人订阅了当时在http://tsing.vonye.com的RSS和Atom地址。现在那里的订阅都是转向这个服务器的RSS和Atom。

不过好像tsing.vonye.com快不能用了,以前的三个订阅地址如下:

http://tsing.vonye.com/feed/rss/

http://tsing.vonye.com/feed/atom/

http://tsing.vonye.com/feed/rss2/

估计上面这三个地址没过多久就不能用了,所以如果你以前是订阅的tsing.vonye.com上的RSS或Atom的话,麻烦你更改为新的地址吧。

新的地址是:

RSS 1.0http://blog.jianqing.net/rss.php

Atom 0.3http://blog.jianqing.net/atom.php

我将保持这两个地址的长期有效性。^_^

本来想用feedburner的服务的,不过RSS和Atom在那儿都乱码了,一时找不到原因,只好暂时先放弃。

updated 2005-4-20:

今天发现feedburner不乱码了,不知什么原因。之前曾经将atom文件中的xml:lang=”zh“改为xml:lang=”zh-CN”,不知是因为这个原因才好的,或者就只是feedburner自己灵异了,呵呵

总之,增加一个订阅地址:FeedBurner

HessianPHP

这是昨晚上从 Effective Life 上看到的。最近一直在找这方面的资料。马上下下来看,是一个很不错的东东。

它是Hessian在PHP上的实现,关于Hessian可以看下面这段介绍。

“The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary protocol, it is well-suited to sending binary data without any need to extend the protocol with attachments.”

我昨晚写了它的介绍写了一半,不过 Binzy 今天已经把它的介绍以及示例写出来了,所以我就不用再写了,呵呵。详见Introduce Hessian PHP

PHP在Remoting和WebService方面的选择确实不是特别多。我找到的比较理想的就是PEAR:SOAP和nusoap这两个。不过Hessian有一个很优势,就是它有Java,Python,Ruby,dotNET等语言的实现,可以实现多种语言间的互通。这正好是我一直想找到的方案,用PHP调用COM组件效率毕竟太低了。

更多的内容可见于HessianPHPHessian的主页

数据救回来了

由于我的误操作,硬盘分区表彻底毁坏,上面六十几个G的数据全没了…… 包括同学的本科生研究基金项目的数据,照片,我的代码,文档……

全部都没了……

痛不欲生啊……

2005/03/27 update:

本来以为没救了,晚上用以前刻的一张 knoppix 的盘引导系统,然后用上面的 testdisk 检查磁盘,终于找出了各个分区,重建了分区表。除了两个ext3的分区外,其它的几个区都恢复了。

testdisk修复分区很有效,推荐使用,呵呵。

晚上给机器装上了debian,决定不用盗版的 Windows 了,以后就只用 Linux 。