电子邮件无法发送短信的详细信息

问题描述:

下面的代码用于侦听传入的短信,将短信中的所有空格取出,然后通过电子邮件发送编辑后的短信。一切工作正常,除了应用程序未能发送电子邮件。任何人都可以看到我做错了什么,帮助我吗?电子邮件无法发送短信的详细信息

new Thread() { 
    public void run() { 

     try { 

      DatagramConnection _dc = 
       (DatagramConnection)Connector.open("sms://"); 

      for(;;) { //'For-Loop' used to listen continously for incoming sms's 

       Datagram d = _dc.newDatagram(_dc.getMaximumLength());      
       _dc.receive(d); //The sms is received       
       byte[] bytes = d.getData(); 
       String address = d.getAddress(); //The address of the sms is put on a string. 
       String msg = new String(bytes); //The body of the sms is put on a string. 
       String msg2 = (replaceAll(msg, " ","")) ; // 


       Store store = Session.getDefaultInstance().getStore(); 

       Folder[] folders = store.list(Folder.SENT); 
       Folder sentfolder = folders[0]; //Retrieve the sent folder 

       Message in = new Message(sentfolder); 
       Address recipients[] = new Address[1]; 

       recipients[0]= new Address("[email protected]", "user"); 

       in.addRecipients(Message.RecipientType.TO, recipients); 

       in.setSubject("Incoming SMS"); //The subject of the message is added 
       in.setContent("You have just received an SMS from: " + address + "/n" + "Message: " + msg2); //Here the body of the message is formed 

       in.setPriority(Message.Priority.HIGH); //The priority of the message is set. 

       Transport.send(in); //The message is sent 

       in.setFlag(Message.Flag.OPENED, true); 
       Folder folder = in.getFolder(); //The message is deleted from the sent folder 
       folder.deleteMessage(in); 
      }  

     }catch (Exception me) { //All Exceptions are caught  
     }  
    } 
}; 

public static String replaceAll(String front, String pattern, String back) { 

    if (front == null) 
    return ""; 

    StringBuffer sb = new StringBuffer(); //A StringBufffer is created 
    int idx = -1; 
    int patIdx = 0; 

    while ((idx = front.indexOf(pattern, patIdx)) != -1) { 
     sb.append(front.substring(patIdx, idx)); 
     sb.append(back); 
     patIdx = idx + pattern.length(); 
    } 

    sb.append(front.substring(patIdx)); 
    return sb.toString(); 
} 

感谢

+0

“无法发送电子邮件” - 出了什么问题?有什么症状?你有吃的例外吗?你尝试过调试吗? =) – 2012-07-21 09:07:48

+0

有没有例外,应用程序建立和编译就好,完美打开。有趣的是,当我离开'String msg2 =(replaceAll(msg,“,”“))'out并将电子邮件内容更改为msg而不是msg2时,该应用程序确实发送了一封包含短信内容的电子邮件,但我希望代码通过电子邮件发送编辑后的短信而不用空格。 – BirthOfTragedy 2012-07-21 09:17:51

+0

你在一个网络连接的设备上,或者模拟器......? – Nate 2012-07-21 09:32:16

这是不是一个真正的答案的问题,只是在我上面的评论的阐述,这可能帮助。

请确保在异常捕获块中执行某些操作,以免代码中的问题不被注意。有可能您的代码没有遇到任何异常,但为了帮助我们,我们需要尝试消除潜在的问题,并且由于您说代码不起作用,但您有一个空的异常处理程序,这很容易首先要修复的区域。

最简单的处理程序只是:

try { 
    // try sending sms here 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

如果你能在调试器(我强烈建议)运行它,那么你现在可以穿上e.printStackTrace()线断点,看它是否曾经受到打击。如果是,请检查e的值并告诉我们它是什么。通常,在我的程序中,我实际上并没有在catch处理程序中使用e.printStackTrace(),但是我有一个记录类,它需要字符串,并且可能是日志级别(例如info,warning,error,verbose),并写入一个日志文件。日志文件可以附加到用户发送给技术支持的电子邮件中,或者如果您只想在开发过程中使用该功能,则可以禁用该日志文件以进行生产。

无论如何,从一个简单的printStackTrace()开始,看看它是否被击中。然后,回报。


编辑:从你在你的问题后的评论描述的症状,好像这是一种可能性,即

String msg2 = (replaceAll(msg, " ","")) ; // 

是抛出一个异常,因此,从来没有让你去的地方你会发送电子邮件。初次检查时,我看不出有什么不妥,但是这可能是一个看起来很不错的地方。这个实施是否完全通过了单元测试?

此外,我认为你的代码中有一个"/n",你可能需要"\n",对吧?