php发送邮件,从数据库里拿出收件人,发送邮件后在邮件的收件人那行都是乱码而信件内容和信件标题不是,这是从页面上输入的该怎么解决呢? 愁死我了
解决方案 »
- PHP邮箱激活功能
- 请问这行PHP代码是什么意思?
- 【散分200】,【贵阳】或【遵义】的PHPer进来留个脚印
- 被MySQL Client API version 搞糊涂了,谁能帮吗指点?
- 求救:MySQL数据导入导出问题!!!我发现MySQL里的中文不能用直接的中文表示,导出之后还是用什么� 表示,请问怎样才能正常导出;
- 这个数据库查询有点头疼,麻烦大伙帮帮我。
- 大家看看这个效果怎么做!!
- $query="select count from count";运行mysql_fecthobject正常,可是换成$query="select count from count where Id=1"就报错,为什么?
- help!!!
- 我想写一个phplib模板相关产品?
- php与oracle连接
- web上出这个问题
$name=iconv('utf-8','gb2312',$收件人);//utf-8改为你数据库编码,gb2312改位你面页编码
$name=iconv('utf-8','gb2312',$toname);
$header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: text/calendar;method=REQUEST";
这样写有什么错误吗
中文的话,还是转gb2312吧,,我也遇到过这个问题.
$name=iconv('utf-8','gb2312',$toname); $header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/calendar;method=REQUEST";
header('Content-Type:text/html;charset=gb2312');//加上字头试试
header('Content-Type: text/html; charset=utf-8');
mysql_query(set names utf8);
mysql_query("set names utf8");
To: =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= <[email protected]>,
=?utf-8?B?TExD5LqV5LiKIOeroA==?= <[email protected]>,
=?utf-8?B?TExD5LqU5Y2B5bWQ5paH5ZKM?= <[email protected]>,
=?utf-8?B?UFPmnb7mnKzoi7HpmoY=?= <[email protected]>,
=?utf-8?B?UFPopb/jgIDpm4XlvaY=?= <[email protected]>,
=?utf-8?B?UFPol6TkupXoi7HlvrM=?= <[email protected]>,
=?utf-8?B?UFPpvYvol6Tml6XntbHnvo4=?= <[email protected]>,
=?utf-8?B?Q0Qg5p2cIOadseayog==?= <[email protected]>,
=?utf-8?B?Q0Tlrokg55Gb5aay?= <[email protected]>,
=?utf-8?B?Q0Tnjosg5pil6Zye?= <[email protected]>,
=?utf-8?B?Q0TlvpAg6JmO?= <[email protected]>,
=?utf-8?B?Q0Tppqwg546y546y?= <[email protected]>,
=?utf-8?B?Q0Tppqwg6I6J?= <[email protected]>,
=?utf-8?B?Q0TnjJsg57+g5aif?= <[email protected]>,
=?utf-8?B?Q0Tmu5XkuabmiJA=?= <[email protected]>
找了下邮件里的头文件是这样写的,我是不是跟据这个写啊?但是中间那些字母到底是什么啊,是不是根据人的名字生成的什么码?
outlook是汉语的,mysql,php是英语的出现乱码是哪个环节不知道,是不是outlook的原因呢,
我从outlook取出的数据是乱码,写进去也是乱码(只是收件人)
以 =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= 为例.
<?php$a = '=?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?=';$b = explode('?', $a);
header("Content-Type:text/html; charset=".$b[1].";");
var_dump($b);
var_dump(base64_decode($b[3]));
exit;
一般outlook看到乱码,在outlook里改变编码就可以了,默认的是西欧iso的.为什么,人家发送的邮件是正常的呢.如23楼所示,在邮件里指明了utf8,并且用base64加密,这样outlook就不会使用默认的去读了.这是关键之处.建议楼主解决完问题以后,多了解一下mail的规范.
<?phpheader("content-type:text/html;charset=Shift-JIS");
//header('Content-Type:text/html;charset=gb2312');// session_start(); $conn = @ mysql_connect("localhost", "root", "") or die("データベース連接エラー");
if($conn) mysql_select_db("business",$conn);
/*
function ckcount(){
$count=0;
foreach($_POST['ck'] as $v)
{
$count ++;
}
return $count;
}if (ckcount()==0)
{echo '<script>;alert("Please choose receiver")</script>;';}
*/function getsql(){
//error_reporting(E_ALL);if ( in_array( '99', $_POST[ 'ck' ] ) )
{
$Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
}
else{
$Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
$index = 0;
foreach($_POST['ck'] as $v)
{
if($index == 0)
$Sql.= " and StaffType = '$v'";
else
$Sql.= "or StaffType ='$v'";
$index ++;
}
}
return $Sql;
}
$Sql=getsql();mysql_query("SET NAMES UTF8");$ResultMailAdd=mysql_query($Sql);$to="";
$toname="";
$cout=0;
while($mailAdd = mysql_fetch_array($ResultMailAdd))
{
if ($cout==0)
{
$to= $mailAdd[MailAdd];
$toname= $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
}
else
{
$to.= ',' . $mailAdd[MailAdd];
$toname.= ',' . $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
}
$cout++;
}
echo $toname;
$from = $_SESSION['MailAddress'];
$subj =$_POST["Subject"];// "my test subject";
$msg =$_POST["Body"];// "this is the email body";
$location=$_POST["Location"];//
$starttime=$_POST["StartTime"];
$endtime=$_POST["EndTime"];
//$name=iconv('utf-8','Shift-JIS',$toname);
$name=iconv('utf-8','gb2312',$toname);
echo $name;
$header = 'To:' . $toname . "\r\n"; $header .= "From: " . $from . "\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: text/calendar;method=REQUEST"; //Various ways to creat a new, random UID
$cal_uid = "{" . uniqid(mt_rand(), true) . "}";
$cal_uid = "{" . date('Ymd').'T'.date('His')."-".rand()."@mydomain.com}";
// $cal_uid = com_create_guid(); $cal_msg =
"BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER:MAILTO:
DTSTART:" . $starttime . "
DTEND:" . $endtime . "
UID:" . $cal_uid . "
LOCATION:" . $location . "
TRANSP:OPAQUE
SEQUENCE:0
DTSTAMP:20060309T045649Z
CATEGORIES: Meeting
DESCRIPTION:" . $msg . "
SUMMARY:" . $subj . "
PRIORITY:5
X-MICROSOFT-CDO-IMPORTANCE:1
CLASS:PUBLIC
BEGIN:VALARM
TRIGGER:-PT3D
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
BEGIN:VTIMEZONE
TZID:US/Central
END:VTIMEZONE
END:VEVENT
END:VCALENDAR"; if (mail($to, $subj, $cal_msg, $header, ""))
{
echo "mail sent";
}
mysql_close($conn); ?>
$headers = 'From: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";
像这样,确定取出来的数据为utf-8,然后将数据用base64编码.