<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>anty.info &#187; development</title>
	<atom:link href="http://www.anty.info/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anty.info</link>
	<description>Comments and help on web development.</description>
	<lastBuildDate>Fri, 11 Jun 2010 14:50:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to compile Haskell&#8217;s network library on Windows</title>
		<link>http://www.anty.info/2009/07/18/how-to-compile-haskells-network-library-on-windows/</link>
		<comments>http://www.anty.info/2009/07/18/how-to-compile-haskells-network-library-on-windows/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 21:45:37 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[compiling]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=102</guid>
		<description><![CDATA[The normal way to recompile a Haskell library would be to: download the Cabal source package e.g. from HackageDB unpack it in a directory locate the directory in the console use &#8220;cabal install &#8211;reinstall&#8221; and watch the compiling process For the network-2.2.1.3 package I couldn&#8217;t use this approach because I always got the message that [...]]]></description>
			<content:encoded><![CDATA[<p>The normal way to recompile a Haskell library would be to:</p>
<ol>
<li>download the Cabal source package e.g. from <a title="Haskells network package" href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/network">HackageDB</a></li>
<li>unpack it in a directory</li>
<li>locate the directory in the console</li>
<li>use &#8220;cabal install &#8211;reinstall&#8221; and watch the compiling process</li>
</ol>
<p>For the network-2.2.1.3 package I couldn&#8217;t use this approach because I always got the message that &#8220;getnameinfo&#8221; couldn&#8217;t be found.</p>
<p><span id="more-102"></span></p>
<p>I discovered <a title="Building network package on Windows" href="http://osdir.com/ml/haskell-cafe@haskell.org/2009-06/msg00325.html">this mail</a> that lead me to the solution, but was kinda vague in the second step. This is why I&#8217;m publishing this post. Here are the 4 steps with a detailed second step:</p>
<ol>
<li>download the source from HackageDB</li>
<li>modify configure.ac by replacing the first paragraph with the second one:<br />
<code class="prettyprint">dnl Under mingw, we may need to set WINVER to 0x0501 to expose getaddrinfo.
if test &quot;x$ac_have_getaddrinfo&quot; = x; then
old_CFLAGS=&quot;$CFLAGS&quot;
if test &quot;z$ac_cv_lib_ws2_32__head_libws2_32_a&quot; = zyes; then
CFLAGS=&quot;-DWINVER=0x0501 $CFLAGS&quot;
AC_MSG_CHECKING(for getaddrinfo if WINVER is 0x0501)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$ac_includes_default
int testme(){ getaddrinfo; }]])],[AC_DEFINE([HAVE_GETADDRINFO], [1], [Define to 1 if you have the `getaddrinfo' function.]) AC_DEFINE([NEED_WINVER_XP], [1], [Define to 1 if the `getaddrinfo' function needs WINVER set.]) EXTRA_CPPFLAGS=&quot;-DWINVER=0x0501 $EXTRA_CPPFLAGS&quot;; AC_MSG_RESULT(yes)],[CFLAGS=&quot;$old_CFLAGS&quot;; AC_MSG_RESULT(no)])
fi
fi</code><br />
<code class="prettyprint">dnl Under mingw, we may need to set WINVER to 0x0501 to expose getaddrinfo.
if test &quot;x$ac_have_getaddrinfo&quot; = x; then
old_CFLAGS=&quot;$CFLAGS&quot;
if test &quot;z$ac_cv_lib_ws2_32__head_libws2_32_a&quot; = zyes; then
dnl    CFLAGS=&quot;-DWINVER=0x0501 $CFLAGS&quot;
dnl    AC_MSG_CHECKING(for getaddrinfo if WINVER is 0x0501)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$ac_includes_default
int testme(){ getaddrinfo; }]])],[AC_DEFINE([HAVE_GETADDRINFO], [1], [Define to 1 if you have the `getaddrinfo' function.]) AC_DEFINE([NEED_WINVER_XP], [1], [Define to 1 if the `getaddrinfo' function needs WINVER set.]) EXTRA_CPPFLAGS=&quot;$EXTRA_CPPFLAGS&quot;; AC_MSG_RESULT(yes)],[CFLAGS=&quot;$old_CFLAGS&quot;; AC_MSG_RESULT(no)])
fi
fi</code></li>
<li>run &#8220;autoreconf&#8221; in the source directory. If you don&#8217;t have autoreconf download <a title="msysDTK-1.0.1.exe: Current Release: msysDTK-1.0.1 released on Jan 01 2003" href="http://sourceforge.net/projects/mingw/files/MSYS%20Supplementary%20Tools/msysDTK-1.0.1.exe/download">msysDTK-1.0.1.exe</a> (or a better version)</li>
<li>run &#8220;cabal install &#8211;reinstall&#8221;</li>
</ol>
<p>I hope this will save a lost soul some time, one day!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2009/07/18/how-to-compile-haskells-network-library-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to enable Akismet in WordPress MU – globaly</title>
		<link>http://www.anty.info/2009/05/06/how-to-enable-akismet-in-wordpress-mu-%e2%80%93-globaly/</link>
		<comments>http://www.anty.info/2009/05/06/how-to-enable-akismet-in-wordpress-mu-%e2%80%93-globaly/#comments</comments>
		<pubDate>Wed, 06 May 2009 20:22:06 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[akismet]]></category>
		<category><![CDATA[wordpress mu]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=81</guid>
		<description><![CDATA[Akismet is the best Worpress plugin. At least from my point of view. I resist using CAPTCHAs whenever I can to offer my visitors the best user-experience. Who likes to comment a post when you additionally have to decipher symbols on an image only to type them into a textbox? For this reason I activated [...]]]></description>
			<content:encoded><![CDATA[<p>Akismet is the best Worpress plugin. At least from my point of view.</p>
<p>I resist using CAPTCHAs whenever I can to offer my visitors the best user-experience. Who likes to comment a post when you additionally have to decipher symbols on an image only to type them into a textbox?</p>
<p>For this reason I activated Akismet on all of my blogs. Now it quietly checks every comment and removes it, if it is detected as spam.</p>
<p><span id="more-81"></span>Now it happens that I own a community site based on <a title="Wordpressµ" href="http://mu.wordpress.org/">WordPress MU</a>, enabeling every registered member to run their own blog.</p>
<p>Unfortunately Akismet needs an API-key which has to be inserted by hand on each and every blog. At least that&#8217;s what I thought until today.</p>
<p><strong>There is an easier way to globally activate Akismet on WordPress MU</strong> and specify an API key that cannot be changed. Follow these steps to aktivate Akismet on all your WP MU blogs:</p>
<ol>
<li>Move the &#8220;akismet&#8221; directory from the &#8220;plugin&#8221; directory to the &#8220;mu-plugins&#8221; directory,</li>
<li>move the file &#8220;akismet.php&#8221; to the &#8220;mu-plugins&#8221; directory,</li>
<li>open the file &#8220;akismet.php&#8221; with a text editor and add your API key on line 12.</li>
</ol>
<p>Now you have activated Akismet on all blogs and the ability to change the key is gone.</p>
<p>With this setup users can&#8217;t deactivate the spam protection and you can apply yourself to more important things.<br />
Like how to get more visitors to your community site.</p>
<p>Oh, and BTW: <a href="http://www.fohguild.org/forums/attachments/screenshots/87340d1220554030-funny-strange-random-pics-2db6wiw.png">I accidently the whole site.</a> But thanks to <a title="Google Cache of anty.info" href="http://google.at/search?q=cache%3Aanty.info">Google Cache</a> I had a backup of all my posts. Just think about it when you accidental delete your whole database. <img src='http://www.anty.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2009/05/06/how-to-enable-akismet-in-wordpress-mu-%e2%80%93-globaly/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SOAP: Procedure &#8216;foo&#8217; not present</title>
		<link>http://www.anty.info/2008/09/01/soap-procedure-foo-not-present/</link>
		<comments>http://www.anty.info/2008/09/01/soap-procedure-foo-not-present/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 13:04:52 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[wsdl]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=64</guid>
		<description><![CDATA[Recently SOAP kept shouting &#8220;Procedure &#8216;foo&#8217; not present in &#8230;&#8221; at me. I assumed the mistake in my WSDL file, since I knew the function &#8220;foo&#8221; existed. If you get the &#8220;Procedure &#8216;foo&#8217; not present&#8221;-error, too you either: forgot to add the procedure &#8220;foo&#8221; to your SOAP server implementation, or you are using a cached [...]]]></description>
			<content:encoded><![CDATA[<p>Recently SOAP kept shouting &#8220;Procedure &#8216;foo&#8217; not present in &#8230;&#8221; at me.</p>
<p>I assumed the mistake in my WSDL file, since I knew the function &#8220;foo&#8221; existed.</p>
<p>If you get the &#8220;Procedure &#8216;foo&#8217; not present&#8221;-error, too you either:</p>
<ul>
<li><strong>forgot to add the procedure</strong> &#8220;foo&#8221; to your SOAP server implementation, or</li>
<li>you are <strong>using a cached version</strong> of your WSDL file at the server side.</li>
</ul>
<p>I discovered that sometimes a cached WSDL file is used, <em>although</em> you are using this code:<br />
<code class="prettyprint">ini_set(&quot;soap.wsdl_cache_enabled&quot;, &quot;0&quot;);</code><br />
If you aren&#8217;t sure whether you are using a cached version or not, you can either</p>
<ul>
<li><strong>reboot</strong> the server to clean the cache, or</li>
<li><strong>delete</strong> all files in /tmp/ starting with &#8220;wsdl-&#8221; (rm /tmp/wsdl-*)</li>
</ul>
<p>If not a cached WSDL file is causing the problem, you should check if you really have a function &#8220;foo&#8221; in your implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2008/09/01/soap-procedure-foo-not-present/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server-side SOAP debugging in PHP</title>
		<link>http://www.anty.info/2008/08/30/server-side-soap-debugging-in-php/</link>
		<comments>http://www.anty.info/2008/08/30/server-side-soap-debugging-in-php/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 12:59:05 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=51</guid>
		<description><![CDATA[Debugging SOAP in PHP can be really time intensive. I found the best practice debugging SOAP is using a log file. I use this code to catch exceptions in the server implementation: $logfilePath = '/path/to/your/logfile.txt'; $debug = true; require_once('Zend/Log.php'); require_once('Zend/Log/Writer/Stream.php'); $writer = new Zend_Log_Writer_Stream(fopen($logfilePath, 'a', false)); $logger = new Zend_Log($writer); try { require_once('MySoapClass.php'); if ($debug) [...]]]></description>
			<content:encoded><![CDATA[<p>Debugging SOAP in PHP can be really time intensive.</p>
<p>I found the best practice debugging SOAP is using a log file. I use this code to catch exceptions in the server implementation:</p>
<p><span id="more-51"></span></p>
<p><code class="prettyprint">$logfilePath = '/path/to/your/logfile.txt';
$debug = true;

require_once('Zend/Log.php');
require_once('Zend/Log/Writer/Stream.php');
$writer = new Zend_Log_Writer_Stream(fopen($logfilePath, 'a', false));
$logger = new Zend_Log($writer);
try {
require_once('MySoapClass.php');
if ($debug) {
ini_set(&quot;soap.wsdl_cache_enabled&quot;, &quot;0&quot;);
}
$server = new SoapServer($wsdl_url);
$server-&gt;setClass('MySoapClass');
$server-&gt;handle();
} catch (Exception $exception) {
if ($debug) {
$logger-&gt;err($exception);
}
throw new SoapFault('MySoapServer', $exception);
}</code></p>
<p>I&#8217;m using <a href="http://framework.zend.com/manual/en/zend.log.html">Zend_Log</a> for the logging part, but you should get the idea.</p>
<p>For faster feedback I&#8217;m tailing the logfile (tail -f /path/to/your/logfile.txt) and use my usual SOAP client to do the requests.</p>
<p>This debugging technique is useful if you get errors like &#8220;looks like we got no XML document&#8221; on the client side.</p>
<p>How do <em>you</em> debug server-side SOAP code?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2008/08/30/server-side-soap-debugging-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PingCrawl injects links</title>
		<link>http://www.anty.info/2008/08/06/pingcrawl-injects-links/</link>
		<comments>http://www.anty.info/2008/08/06/pingcrawl-injects-links/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 22:49:55 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[pingcrawl]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=25</guid>
		<description><![CDATA[How do you get links from all over the blogosphere quickly? You create a famous wordpress plugin and implement a backdoor to inject your own links. Josh, from Josh Team and Eli, from Blue Hat SEO did this with his WordPress plugin &#8220;PingCrawl&#8220;. PingCrawl automatically searches for related posts on other blogs with Googles blogsearch [...]]]></description>
			<content:encoded><![CDATA[<p>How do you get links from all over the blogosphere quickly?</p>
<p>You create a famous wordpress plugin and implement a backdoor to inject your own links.</p>
<p>Josh, from <a href="http://joshteam.wordpress.com/2008/08/05/pingcrawl-wordpress-plugin/">Josh Team</a> and Eli, from Blue Hat SEO did this with his WordPress plugin &#8220;<a href="http://www.bluehatseo.com/new-wordpress-plugin-pingcrawl/">PingCrawl</a>&#8220;.</p>
<p><span id="more-25"></span></p>
<p>PingCrawl automatically searches for related posts on other blogs with <a href="http://blogsearch.google.com/">Googles blogsearch</a> and pings each of them to get a valid backlink. Awesome idea!</p>
<p>If you take a look at the code of the plugin you stumble over this function:<br />
<code class="prettyprint">protected function injection() {
$link = file_get_contents( 'http://www.bluehatseo.com/cgi-bin/findsites.cgi' );
if ( empty( $link ) ) {
$link = '&lt;a href=&quot;http://www.spottedhere.com&quot;&gt;Dallas Nightlife Entertainment&lt;/a&gt;';
}
return $link;
}</code></p>
<p>This function tries to get the content of the website <a href="http://www.bluehatseo.com/cgi-bin/findsites.cgi">http://www.bluehatseo.com/cgi-bin/findsites.cgi</a>. If it doesn&#8217;t get one it will (throw an error and) return default linkcode to http://www.spottedhere.com.</p>
<p>If you read further you&#8217;ll notice this code, which injects the link at a probability of <span style="text-decoration: line-through;">1:6</span> 1:4 for each tag:</p>
<p><code class="prettyprint">$seed = rand( 0, 11 );
if ( $seed &lt;= 2 ) {
$content .= '&lt;li&gt;' . $this-&gt;injection() . '&lt;/li&gt;';
}</code></p>
<p>You are save to remove these two code parts from the plugin, if you want to.</p>
<p>If you want to inject links with a sneaky plugin, you should probably not release it in a post on a SEO blog. Just my thoughts.</p>
<p>I hope Eli will not take this post personally, I just want to protect others who are too lazy to look over the code of PingCrawl.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2008/08/06/pingcrawl-injects-links/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>What to consider when deploying web apps</title>
		<link>http://www.anty.info/2008/05/21/what-to-consider-when-deploying-web-apps/</link>
		<comments>http://www.anty.info/2008/05/21/what-to-consider-when-deploying-web-apps/#comments</comments>
		<pubDate>Wed, 21 May 2008 16:13:22 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[screencast]]></category>

		<guid isPermaLink="false">http://www.anty.info/?p=23</guid>
		<description><![CDATA[When I&#8217;m tired I tend to cross read blog posts in my feedreader. This way I just found an interesting screencast in Chris Hartjes&#8217; blog which I thought I should mention here: 6 Steps to a perfect deployment. Chris explains how he&#8217;s deploying web applications and why you should follow this six-step-approach, too: The first [...]]]></description>
			<content:encoded><![CDATA[<p>When I&#8217;m tired I tend to cross read blog posts in my feedreader. This way I just found an interesting screencast in Chris Hartjes&#8217; blog which I thought I should mention here: <a href="http://www.littlehart.net/atthekeyboard/2008/04/17/deployment-is-not-a-4-letter-word-the-screencast/">6 Steps to a perfect deployment</a>.</p>
<p><span id="more-23"></span></p>
<p>Chris explains how he&#8217;s deploying web applications and why you should follow this six-step-approach, too:</p>
<ol>
<li>The first deploy will not hurt, but as soon as you change something and it breaks it <em>will</em> hurt.</li>
<li>Make sure you are able to undo changes in the productive environment if you change something.</li>
<li>Don&#8217;t forget that there&#8217;s more in your application than code!</li>
<li>Automate every step, else mistakes <em>will</em> happen!</li>
<li>Make sure the deployment and production environment are as close as possible.</li>
<li>Ownership of code is important, make sure it&#8217;s properly deployed.</li>
</ol>
<p>Chris recommends <a href="http://capify.org/">Capistrano</a>, which is originally a deploy-tool for Ruby but since version 2 it doesn&#8217;t care about what it deploys. I personally haven&#8217;t used Capistrano, but hearing Chris&#8217; satisfaction I think it&#8217;s worth checking it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2008/05/21/what-to-consider-when-deploying-web-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Mail Obstacles</title>
		<link>http://www.anty.info/2008/02/18/zend_mail-obstacles/</link>
		<comments>http://www.anty.info/2008/02/18/zend_mail-obstacles/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 18:41:34 +0000</pubDate>
		<dc:creator>anty</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[inline images]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Mime]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Mail]]></category>
		<category><![CDATA[Zend_Mime]]></category>

		<guid isPermaLink="false">http://www.anty.info/2008/02/18/zend_mail-obstacles/</guid>
		<description><![CDATA[I just finished developing a newsletter-script for a client. I encountered some problems during the development and want to publish the solutions here. I used Zend_Mail and Zend_Mime to create HTML-mails with inline images. I used the last stable Zend Framework version available right now: 1.0.3. Microsoft Outlook 2007 displays odd characters, Thunderbird doesn&#8217;t Check [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished developing a newsletter-script for a client.<br />
I encountered some problems during the development and want to publish the solutions here.</p>
<p><span id="more-10"></span></p>
<p>I used <a href="http://framework.zend.com/manual/en/zend.mail.html">Zend_Mail</a> and <a href="http://framework.zend.com/manual/en/zend.mime.html">Zend_Mime</a> to create HTML-mails with inline images. I used the last stable <a href="http://framework.zend.com">Zend Framework</a> version available right now: 1.0.3.</p>
<h3>Microsoft Outlook 2007 displays odd characters, Thunderbird doesn&#8217;t</h3>
<p>Check if you use:<br />
<code class="prettyprint">new Zend_Mail('utf8');</code><br />
If you do, change it to:<br />
<code class="prettyprint">new Zend_Mail('utf-8');</code><br />
Outlook doesn&#8217;t like the non-dashed version of the UTF-8 charset.</p>
<h3>Inline images are displayed as attachments</h3>
<p>You need to set the type of the mail to Multipart/Related:<br />
<code class="prettyprint">$mail-&gt;setType(Zend_Mime::MULTIPART_RELATED);</code><br />
Add the images like this:<br />
<code class="prettyprint">$mail-&gt;createAttachment($imageData, $imageType, Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64);</code><br />
Add the HTML-Version of the mail like this:<br />
<code class="prettyprint">$mail-&gt;setBodyHtml($htmlMessage, null, Zend_Mime::MULTIPART_RELATED);</code></p>
<h3>The subject displays odd characters</h3>
<p>There&#8217;s a <a href="http://framework.zend.com/issues/browse/ZF-2532" title="Wrong encoded of the subject, if the subject is longer than Zend_Mime::LINELENGTH">bug in Zend_Mail</a> that causes subjects longer than 200 characters to be malformed in the mail. It&#8217;s also causing problems in the Zend Framework version 1.5 preview. The solution is to use subjects shorter than 200 characters until a fix is integrated in Zend_Mail.</p>
<h3>Zend_Mail throws a 501 exception on international mail-addresses</h3>
<p>If your email addresses are pointing to domains like hpphör.de, your SMTP-server might prevent you from sending to them, causing Zend_Mail to throw a 501 exception. <a href="http://www.nabble.com/Re%3A-Zend_Mail---Zend_Mail_Transport_Smtp-Problems-p11294914s16154.html" title="Zend_Mail &amp; Zend_Mail_Transport_Smtp Problems">A possible solution</a> is to convert the domainname to the <a href="http://en.wikipedia.org/wiki/Internationalized_domain_name" title="Internationalized Domain Name">IDN</a> equivalent (hpphör.de results in xn--hpphr-mua.de). Currently, there is no ZendFramework module available to do the conversion. Maybe the <a href="http://pecl.php.net/package/idn">IDN Pecl package</a> can help you on this subject.</p>
<p><strong>Note:</strong> Malformed mail addresses also cause a 501 exception to be thrown. Catching a 501 exception does not guarantee an IDN domain-address!</p>
<h3>The HTML layout is totally messed up</h3>
<p>Don&#8217;t use CSS for styling, go back to Table-based styling. Most mail-clients still don&#8217;t display HTML correctly. Use inline-style definitions, even though they produce redundant code.</p>
<p>Get more information on HTML mail styling here:</p>
<ul>
<li><a href="http://www.sitepoint.com/article/code-html-email-newsletters">How to Code HTML Email Newsletters</a></li>
<li><a href="http://www.campaignmonitor.com/blog/archives/2006/03/a_guide_to_css_1.html">A Guide to CSS Support in Email</a></li>
</ul>
<p>I hope this helps a bit if you find yourself in the position to code a PHP mail-script.</p>
<p>At <a href="http://www.sitepoint.com">SitePoint</a> I found a very good article that covers <a href="http://www.sitepoint.com/article/principles-beautiful-html-email" title="The Principles of Beautiful HTML Email">how to design HTML mails from the content point of view</a>. I recommend to read the first two pages if you need to write the content by yourself!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anty.info/2008/02/18/zend_mail-obstacles/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
