教你如何配置Ubuntu用于高效、高质量的发送邮件

 

       在网站上线后,经常会遇到的一个需求就是发送邮件, 比如注册验证邮件,密码找回邮件等。我尝试过好多方法,其中最简单的方法就是花钱买别人的服务, 比如说国外的mailgun, 国内的sendcloud等, 相比而言, 他们的服务好,只是要花钱, mailgun一个月内小于1w封是免费的, sendcloud一天只能免费发200封, 很多时候这些数字很容易就超了。还有一种方法是注册一个免费邮件,然后通过这个免费邮箱提供的smtp服务发邮件。这种方法的缺点也很明显, 分信量照样限制, 而且,你还得设置发信间隔, 如果一分钟内你发送的量超过一个免费邮箱设定的限值, 你的邮件也发不出去。 所以, 就得找一个更好的, 最好就是能免费的发邮件的方法。

      免费的发邮件的方法,现成的有一种, 就是sendmail。 今天要我教大家的也是如何配置,使得我们用sendmail发出的邮件也可以被邮件服务商认为是正常的邮件。

      通常通过使用sendmail发出的邮件会有以下几个缺点

  1. 在邮件收到时,会显示www-data代发的字样,如图所示localhost.localdomian, 很容易被当做垃圾邮件,使得我们的发信质量大大降低
  2. 没有配置的好的情况下, 发送一封信的时间会很长,可达4-5秒的时间,简直不能忍受啊
  3. 被拒绝或者邮件被评为垃圾邮件的可能性很大

因为上面的问题,今天我就教大家如何通过一些配置和操作来使得我们用sendmail发出的邮件速度快, 接收率高。 ps: 本教程是基于 ubuntu 14

1. 先注册一个域名邮箱

要使我们的发信可受信任,就需要用我们的域名做发信箱, 比如说i#mengxi.me这样子的。设置这样的邮箱, 我推荐使用腾讯企业邮箱 http://exmail.qq.com.  虽然他们没有给我钱, ^_^。

可以注册一个免费试用账号:http://exmail.qq.com/signupfree#signup/free

具体的怎么注册,就按他们的提示信息走就好,然后 设置好你的域名解析项,就可以直接使用了。

 

2. 设置sendmail

先在ubuntu上运行命令 sudo apt-get install sendmail 安装sendmail安装sendmail

安装好sendmail后,再修改hosts文件

修改hosts

确保如下图所示在红圈里加入你的主机名,主机名可以通过命令hostname来获取

填写主机名

查看主机名

如果要修改主机名, 请使用下面的命令:

sudo vi /etc/hostname

然后, 重启网络服务

重新加载网络

重启网络服务后,使用命令 sendmailconfig来配置sendmail, 在配置过程中, 对任何的询问都输入Y

配置sendmail

配置sendmail

 

到这里我们的sendmail就配置好了,但是,你觉得到这里就完了?不不不!没完, 我们还得设置我们的php

3. 设置php.ini

其实现在php已经能够通过mail函数正常发送邮件了,但是这个时候你发的邮件要很长时间才能到达你的收件箱,且, 邮件会被放到垃圾箱,会有这样的文字, “邮件由[email protected]代发

20151205131213

相信这也不是你所想要的,接下来我们就通过一个配置来,解决这个问题。

配置你的php.ini. 如果你使用的是nginx的话,配置文件在 /etc/php5/fpm/php.ini

nginx配置php.ini

如果是apache2的话,配置文件在/etc/php5/apache2/php.ini

apache2配置php.ini

我们找到sendmail_path这个key

修改sendmail参数

在我圈出来的红框里写上你自己的邮箱, 最好是你自己的域名邮箱, 这样更加容易保证发信的成功率。

然后重启php5-fpm ( Nginx ) 或apache2

对于Nginx服务器:

sudo service php5-fpm restart

对于apache2

sudo service apache2 restart

 

好了, 你现在就可以快速、高效的发送不限数量的邮件了

 

本文为原创文章, 转载请注明出处, 谢谢!

Joomla使用Nginx作Web服务时, 连接重写时含有index.php解决方案

 

如果你使用joomla, 使用的是nginx作为web 服务的话, 你可能会面临和我们一样的问题,只能访问首页,访问其他页面出现404错误,而且, 在URL连接里会出现index.php。 如果之前我们用apache的时候, 只要开启mod_rewrite, 然后把htaccess.txt 改成.htaccess就能正常使用了, 但是在nginx下, 该怎么配置尼?

我google了很多,看了官网上的说明和帮助,都没有效, 最终发现一个有效的方法。 请按照下面一样设置站点的配置文件:

server {

        listen 80;
        server_name example.com;
        root /var/www/example/public_html;
        index  index.php index.html index.htm default.html default.htm;

        access_log /var/log/nginx/accn_access.log;
        error_log /var/log/nginx/accn_error.log;

        ##
        # JOOMLA SEF
        ##

        location / {
              try_files   $uri $uri/ /index.php?q=$request_uri&$args;
        }

        ##
        # PHP scripts to FastCGI 
        ##
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;

        }

}

这个有效的重点在于, 这一行:

try_files $uri $uri/ /index.php?q=$request_uri;

意思把URI当做一个参数q传给了index.php, 这个joomla的入口文件,然后估计joomla内部有机制实现转换。

 

如果有joomla的商业合作,请联系我i#mengxi.me

与其更好,不如不同

最近接触了几个千万级别融资的企业老总,天使投资这事大多数人都是不会遇到了,所以我在这边也就不展开讲。但是有些案例,讲出来,还是能够对大家有一定的启发性的。我之前读过一本书,Peter Thiel写的《从0到1》,我当时读完之后,只是有个概念在脑子里。并没有什么特别深的感触,不过现在,我逐渐接触到了一些项目,慢慢地开始认同这种观点。和AUN防臭袜(自行百度)品牌创始人兼总经理吴家淡先生泡茶的时候,他聊起自己的创业经历,AUN旗舰店于2013年10月份开始营业,2014年的业绩预计在1000万左右,其中天猫京东800万左右,线下200多万。在电商袜子这个品类中,AUN的客单价基本是最高的——目前大部分的袜子品牌,还处于低价竞争的情况,而AUN将客单价维持在了140元左右。他当时问我,生意从哪里来,我说,生意从市场中来,他笑笑,说,生意从竞争对手那里来。市场这块蛋糕就是那么大,你占得多,别人就占得少,你占得少,别人就占得多。比如饮料市场就那么大,王老吉的崛起,肯定伴随着其他饮料的市场份额降低。所以我们就得细分出一个市场,找到一个可以成为第一的市场。他给我举了一个例子,世界上有些小国家和中国某些城镇的面积差不多大,但是,一个小国的国王,和中国一个镇长,可支配的资源差得太多。第一有一个光环效应,可以有很多好处,有了第一,供应商愿意跟你合作,渠道商也愿意跟你合作,我想起了我老妈从小教我的一句话,越有钱,就越省钱。听到这里,我有点好奇了,那么我怎么才能找到这么一个没人关注的领域呢。他给我讲了几点,首先,要分析整个外部环境,明确竞争对手的优缺点,给顾客一个选择自己而不选择竞争对手的理由,同时避免接触竞争对手在顾客心智中强势的那一部分。他举了两个例子,一个是可口可乐和百事可乐的, 百事可乐就跟可口可乐比年轻,宣传中就一直说可口可乐是父亲那一辈人喝的,百事是年轻人喝的,同时还一直请年轻的明星代言,巩固自己代表年轻、活力的形象。另一个例子是关于宝马和奔驰的,当时宝马想进军豪车市场的时候,市场中已经有奔驰了,奔驰的口号是坐得最舒服的豪车,这个时候,坐得舒服,就是奔驰在消费者心中一个强势的形象,如果这时候,宝马说,宝马是比奔驰更舒服的豪车,效果和说服力都会很一般,所以宝马的定位就是最好开的豪车,成功地切入了市场。于是就有了现在的坐奔驰,开宝马之说。我也补充了一个例子,魅族跟小米的,魅族开始针对小米做营销的时候,就不谈发烧,而谈极致、梦想。等等,这样的例子,仔细想,其实是有很多的。更多的时候,还是需要我们对市场的理解和洞察。最后他跟我说,你不要总想着在同质化的领域做得比别人更好,那是成功学灌给你的鸡汤,教你只要努力就能成功,其实差异化竞争才是这个社会的立足之道。你在一个细分领域做成第一之后,哪怕是巨头都很难超越你,因为他们的盘子太大,没有办法把力量集中到你这一个点。对他们来说,最好的办法,可能就是把你收购了,有时候,这可能是双方都想要的结果。我似乎听懂了一些,拜别了吴总之后,我总结了一下,也就是我今天的主题:与其更好,不如不同。分享给大家,谢谢。

转自知乎

编辑于 2015-10-31

专注你的梦想,绝不跟自己说不

Today is the day for focus, dreams and perseverance. Think about where u want to go, who you want to be. Set goals and walk one step in front of the other. NEVER for one second let yourself think it’s not gonna happen. It might not happen exactly as you plan or wish but it IS going to happen! Go make it, create it, live it, breathe it, BE it!! Walk light!

 

 

https://plus.google.com/+AliciaKeys/posts/WEDUaDQJ1TF

Joomla中的Task 和view 深入学习

 

622762d0f703918f057e8039503d269758eec492

Joomla 是一个优秀的CMS系统,她可以让你快速的完成一个网站的建设,她提供组件,模块,模板能够满足你大部分的网站需求。而组件在其中举足轻重。

一、基本知识

组件(component ) 用于显示页面的主要数据。Joomla的组件采用的是MVC架构设计。 在一个页面请求产生时,其URL中可能包括task, view, layout等信息。我在这里就是要讨论这个task和view. 一般URL中如果含有task就不会含有view, 这里因为joomla认为task就完成一个特定的任务,比如说数据库操作,有效性验证等, 而view是负责显示数据。通常的设计是task里完成任务处理后,会调用setRedirect方法引导向一个view来显示数据。其实在joomla里,如果URL中没有指定task的话,会默认task为display。

二、问题

在项目中,需要在页面的meta数据里包含Open graphic protocol 数据。Open graphic protocol 用于给社交网络提供要分享的数据描述。 如果你的页面是通过task来完成的,然后 在task里通过setRedirect根据数据跳转到不同的view进行授权验证, 然后验证通过后显示数据页面的话,你可能会遇到这种问题:你需要分享这个页面,你在这个页面的meta数据里添加了Open graphic protocol 数据,你希望分享到facebook, google+等社交网站时,你会发现在分享页面显示的数据和图片并不是你想要显示页面的数据。

三、解决方案

上面的问题是因为Open graphic protocol 数据获取并不支持跳转,如果遇到跳转,一般都会去网站首页拾取数据,而这并不是我们想要的。引起这个问题就是setRedirect。 setRedirect的原理是发送给浏览里的HTML头中包含了跳转指令。而解决上面的问题的方法是不使用setRedirect, 而是使用display. 每一个JControllerLegacy都有一个display方法,你只要设置input里的view, layout, 以及其他你要传递过去的数据,然后调用display方法就可。

下面是示例代码:

    /**
     * 内部跳转,用于代替setRedirect. 为什么要这样子做呢?
     * 因为 setRedirect他会发送一个http头到浏览器,让浏览
     * 进行跳转,这样一来就多了一个网络请问, 这是其一。最
     * 为主要的是setRedirect在某些不支持浏览器redirect的情况
     * 下达不到效果,例如:open graphic protocal
     * 
     * @param type $view 要显示的view
     * @param type $layout 要显示的layout, 默认为NULL
     */
    protected function internalRedirect($view, $layout=null){
        $this->input->set("view", $view);
        $this->input->set("layout", $layout);
        return $this->display();
    }
    
    public function checkAvailable(){
        //其他的业务代码
        $this->input->set('tmpl', 'doexam');
        return $this->internalRedirect("doexam", $layout);
    }

上面的代码是写在你的Controller里的。函数internalRedirect通过设置$input(这个input是指url的输入参数) 中的view, layout,然后直接调用JControllerLegecy的display方法来显示页面。

在checkAvailable方法中,在调用internalRedirect之前,还设置了其他 view需要的参数。

梦溪的一个朋友说他在做他的一个网站 时遇到了这样的问题,我们讨论并分析了Joomla的实现代码,发现其实这个解决挺容易, 只要你熟悉Joomla组件开发。如果你有问题,可以找我一起交流

希望本文能够解决你所遇到的问题。