android email支持含原邮件的转发及支持发送html文件

      最近,在看android 的email ,使用中发现其有2个不足:

      1.转发邮件不能带附件

       可以如下修改: 在MessageCompose.java中加入如下方法

private boolean loadAttachments(Message message, int depth) {
            try {
                Attachment[] attachments = Attachment
                        .restoreAttachmentsWithMessageId(this, message.mId);
                for (final Attachment attachment : attachments) {
                    mHandler.post(new Runnable() {
                        public void run() {
                            if(null!=attachment.mContentUri){
                                Uri aUri = Uri.parse(attachment.mContentUri);
                                if(null!=aUri){
                                    addAttachment(aUri);
                                }
                            }
                        }
                    });
                }
                return true;
            } catch (Exception ex) {
                ex.printStackTrace();
                return false;
            }
}


并且在 processSourceMessage方法中打开如下代码:

if (!loadAttachments(message, 0)) {
                mHandler.sendEmptyMessage(MSG_SKIPPED_ATTACHMENTS);
}

其在转发时可能需要修改下载在转发附件代码


1.2

    在MessageCompose.java中添加这2个方法:

             private boolean findAttachmentWithMessageId(Context context,long messageId){
               Uri uri =  ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI,messageId);
        Cursor c = context.getContentResolver().query(uri,Attachment.CONTENT_PROJECTION,null,null,null);
        boolean allAttachmentsDownload = true;
        try{
            int count = c.getCount();
            for(int i = 0;i<count;++i){
                               c.moveToNext();
                               final Attachment attachment = new Attachment();
                       attachment.mFileName = c.getString(Attachment.CONTENT_FILENAME_COLUMN);
                               attachment.mContentUri = c.getString(Attachment.CONTENT_CONTENT_URI_COLUMN);
                               attachment.mSize  = c.getLong(Attachment.CONTENT_SIZE_COLUMN);
                               attachment.mMimeType = c.getString(Attachment.CONTENT_MIME_TYPE_COLUMN);
                               if(attachment.mContentUri == null){
                               allAttachmentsDownload = false;
                               continue;
                               }
 
                               mHandler.post(new Runnable(){
                               public void run() {
                                       addAttachment(attachment);
                                       }
                               });
               }
               }finally {
                       c.close();
               }
               return allAttachmentsDownload;
    }

       private boolean loadAttachments(Message message,Context context){
        return findAttachmentWithMessageId(context,message.mId);
       }


在processSourceMessage()方法里面:else if(ACTION_FORWARD.equals(mAction))下
if(!loadAttachments(message,MessageCompose.this)){
 mHandler.sendEmaptyMessage(MSG_SKIPPED_ATTACHMENTS);
}代码方开。


将MessagingController.java文件

   loadAttachment方法里面的:
  pruneCachedAttachments(accountId);注掉


2.转发含原邮件

MessageCompose.java转发中加入

if(mSource.mHtml!=null){                  
                    message.mHtml = "<br><div>"+message.mText+"</div><br><div>"+message.mIntroText+"</div><br>"+mSource.mHtml;               
                    message.mIntroText= message.mHtml;
                    message.mText = null;
}

Rfc822Output.java中对writeTextWithHeaders方法改造:

if(ISFORWORD){//全局变量,定义是否转发
            writeHeader(writer, "Content-Type", "text/html; charset=utf-8");  //发送html格式eamil
        }else{
            writeHeader(writer, "Content-Type", "text/plain; charset=utf-8");
 }


可能有不足,互相交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值