2012-08-27 29 views
0

發送郵件時當如下 與收據發送電子郵件:PERSONA CC:personB BCC:personC的Bug MailCore通過BCC

所有的三個人將獲得的電子郵件。所有收到的電子郵件都會在收據字段中顯示personC。正如我們所知,不應顯示密件抄送聯繫人personC。爲何會發生這種情況?我正確地將CTCoreMessage設置爲,cc和bcc。這是一個MailCore框架的錯誤嗎?或者有什麼我錯過了?

在此先感謝!

下面是供您參考相關的代碼

- (IBAction)buttonSendPressed:(id)sender 
{ 
[self dismissViewControllerAnimated:YES completion:^{ 
    CTCoreMessage *testMsg = [[CTCoreMessage alloc] init]; 
    NSMutableArray *mutArrTos = [NSMutableArray array]; // personA 
    NSMutableArray *mutArrCcs = [NSMutableArray array]; // personB 
    NSMutableArray *mutArrBccs = [NSMutableArray array]; // personC 
    NSLog(@"toContactArr :%@",toContactArr); 

    if (toContactArr.count>0) { 
     for (NSDictionary *dict in toContactArr) { 
      [mutArrTos addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]]; 
     } 
     NSLog(@"mutArrRecipients : %@", mutArrTos); 
     [testMsg setTo:[NSSet setWithArray:mutArrTos]]; 
    } 

    if (ccContactArr.count>0) { 
     for (NSDictionary *dict in ccContactArr) { 
      [mutArrCcs addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]]; 
     } 
     NSLog(@"mutArrRecipients : %@", mutArrCcs); 
     [testMsg setCc:[NSSet setWithArray:mutArrCcs]]; 
    } 


    if (bccContactArr.count>0) { 
     for (NSDictionary *dict in bccContactArr) { 
      [mutArrBccs addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]]; 
     } 
     NSLog(@"mutArrRecipients : %@", mutArrBccs); 
     [testMsg setBcc:[NSSet setWithArray:mutArrBccs]]; 
    } 

    [testMsg setFrom:[NSSet setWithObject:[CTCoreAddress addressWithName:@"222222" email:@"[email protected]"]]]; 
    [testMsg setBody:self.textView.text]; 
    [testMsg setSubject:self.textField.text]; 

    DbManager *dbManager = [[DbManager sharedManager] switchDBWithFileName:DBNAME]; 
    User *user = [dbManager getAccount]; 
    NSString *account = user.account; 
    NSString *pwd = user.password; 
    NSString *emailType = user.email_type; 
    NSLog(@"user: %@", user); 

    NSLog(@"account: %@", account); 
    NSLog(@"pwd: %@", pwd); 
    NSLog(@"emailType: %@", emailType); 


    NSError *error; 
    BOOL success = [CTSMTPConnection sendMessage:testMsg server:@"smtp.gmail.com" username:@"[email protected]" password:@"222222" port:25 useTLS:YES useAuth:YES error:&error]; 
    if (!success) { 
     // Present the error 
     NSLog(@"error: %@", error); 
    }else{ 
     NSLog(@"CTSMTPConnection success"); 
    } 

}]; 
} 

回答

4

閱讀SMTP協議之後。我修改了CTCoreMessage.m以刪除標題中的密件抄送地址,如下所示。然後,密件抄送地址將不會在接收器中打印。

CTCoreMessage.m

- (NSString *)render { 
CTMIME *msgPart = myParsedMIME; 

if ([myParsedMIME isKindOfClass:[CTMIME_MessagePart class]]) { 
    /* It's a message part, so let's set it's fields */ 
    struct mailimf_fields *fields; 
    struct mailimf_mailbox *sender = (myFields->fld_sender != NULL) ? (myFields->fld_sender->snd_mb) : NULL; 
    struct mailimf_mailbox_list *from = (myFields->fld_from != NULL) ? (myFields->fld_from->frm_mb_list) : NULL; 
    struct mailimf_address_list *replyTo = (myFields->fld_reply_to != NULL) ? (myFields->fld_reply_to->rt_addr_list) : NULL; 
    struct mailimf_address_list *to = (myFields->fld_to != NULL) ? (myFields->fld_to->to_addr_list) : NULL; 
    struct mailimf_address_list *cc = (myFields->fld_cc != NULL) ? (myFields->fld_cc->cc_addr_list) : NULL; 
// struct mailimf_address_list *bcc = (myFields->fld_bcc != NULL) ? (myFields->fld_bcc->bcc_addr_list) : NULL; 
    clist *inReplyTo = (myFields->fld_in_reply_to != NULL) ? (myFields->fld_in_reply_to->mid_list) : NULL; 
    clist *references = (myFields->fld_references != NULL) ? (myFields->fld_references->mid_list) : NULL; 
    char *subject = (myFields->fld_subject != NULL) ? (myFields->fld_subject->sbj_value) : NULL; 

    //TODO uh oh, when this get freed it frees stuff in the CTCoreMessage 
    //TODO Need to make sure that fields gets freed somewhere 
// fields = mailimf_fields_new_with_data(from, sender, replyTo, to, cc, bcc, inReplyTo, references, subject); 
    fields = mailimf_fields_new_with_data(from, sender, replyTo, to, cc, NULL, inReplyTo, references, subject); 


    [(CTMIME_MessagePart *)msgPart setIMFFields:fields]; 
} 
return [myParsedMIME render]; 
} 
2

enter image description here

貌似錯誤是與框架本身,作爲框架不顯示任何說,密件抄送地址將是隱藏

它只是顯示消息可以設置爲密件抄送,抄送和。

我已經挖了框架,2腳,卻發現關於密件顯示,它會在接收端被隱藏什麼...

+0

我們中國人經常挖3英尺XD –

+0

LOLZ ........... – Charan

+0

我固定的bug,PLZ檢查我的答案。 –