通过Java API发送邮件:即使附件失败,如何发送邮件?(Sending mail via Java API: How to send the mail even if attachment fails?)
这是我的代码:
try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(messageSubject); message.setText(messageBody); BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText(messageBody); MimeBodyPart messageBodyPart2 = new MimeBodyPart(); String filename = attachment; DataSource source = new FileDataSource(filename); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName(filename); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); message.setContent(multipart ); Transport.send(message); } catch (MessagingException mex) { mex.printStackTrace(); }
即使邮件附件由于某种原因失败,我怎么还能发送电子邮件? ATM如果附件失败,则不发送电子邮件,这在我的情况下是不好的。 我应该使用另一个try / catch语句吗?我最后也应该这样做吗? 我是Java新手(3-4周)
编辑:将我的代码更改为此,但没有工作
try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(messageSubject); message.setText(messageBody); try { BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText(messageBody); MimeBodyPart messageBodyPart2 = new MimeBodyPart(); String filename = attachment; DataSource source = new FileDataSource(filename); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName(filename); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); message.setContent(multipart); } catch (Exception e) { message.setText(messageBody2); e.printStackTrace(); } Transport.send(message); } catch (MessagingException mex) { mex.printStackTrace(); }
This is my code:
try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(messageSubject); message.setText(messageBody); BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText(messageBody); MimeBodyPart messageBodyPart2 = new MimeBodyPart(); String filename = attachment; DataSource source = new FileDataSource(filename); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName(filename); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); message.setContent(multipart ); Transport.send(message); } catch (MessagingException mex) { mex.printStackTrace(); }
How can I still send the email even if mail attachment fails for some reason? ATM if attachment fails, the email is not sent, which is bad in my case. Should I use another try/catch statement and should I have finally as well? Im new to Java (3-4 weeks)
edit: Changed my code to this, but didnt work
try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(messageSubject); message.setText(messageBody); try { BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText(messageBody); MimeBodyPart messageBodyPart2 = new MimeBodyPart(); String filename = attachment; DataSource source = new FileDataSource(filename); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName(filename); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); message.setContent(multipart); } catch (Exception e) { message.setText(messageBody2); e.printStackTrace(); } Transport.send(message); } catch (MessagingException mex) { mex.printStackTrace(); }
原文:https://stackoverflow.com/questions/18107716
最满意答案
NaN
不等于任何东西,甚至不是NaN
。有关权威来源,请参阅ECMAScript 5官方规范 ,第11.9.1节和第11.9.3节:
1. If Type(x) is the same as Type(y), then [...] c. If Type(x) is Number, then i. If x is NaN, return false. ii. If y is NaN, return false. [...]
NaN
is not equal to anything, not evenNaN
.More detailed SO question and answer
For the authoritative source, see the ECMAScript 5 Official Specification, sections 11.9.1 and 11.9.3:
1. If Type(x) is the same as Type(y), then [...] c. If Type(x) is Number, then i. If x is NaN, return false. ii. If y is NaN, return false. [...]
相关问答
更多-
NaN不等于任何东西,甚至不是NaN 。 在MDN参考 更详细的问题和答案 有关权威来源,请参阅ECMAScript 5官方规范 ,第11.9.1节和第11.9.3节: 1. If Type(x) is the same as Type(y), then [...] c. If Type(x) is Number, then i. If x is NaN, return false. ii. If y is NaN, return false. [...] ...
-
为什么易变性行为怪异(Why Volatile is behaving weirdly)[2021-11-23]
volatile关键字不是同步原语。 它只是防止缓存线程上的值,但它不会阻止两个线程修改相同的值并将其同时写回。 假设两个线程到达需要增加计数器的时间点,现在这个计数器已经设置为5.两个线程都看到了5,使得6出来了,然后把它写回到计数器中。 如果计数器不是volatile ,则两个线程都可以假定他们知道该值为6,并跳过下一次读取。 然而,它是波动的,所以他们都会读回6,并继续增加。 由于线程没有进入锁步,所以在输出中可能会看到一个不同于10000的值,但实际上没有机会看到20000。 The volatil ... -
没有什么是表现得很奇怪,它的行为应该是应有的。 当你有一条以上的记录,并且你正在使用像MAX()/MIN()/COUNT()...这样的聚合函数时,如果没有聚合函数的其他列具有不同的值,则会选择其中一条(不确定按什么顺序,我随机思考)。 因此,如果您希望它们返回相同的内容,那么您应该使用以下查询: SELECT UNIX_TIMESTAMP(created_at), created_at, message FROM messages WHERE UNIX_TIMESTAMP(created_at) =(S ...
-
问题在于你已经在start_hour列名称周围放置了单引号。 实际上,将一个字符串与“start_hour”值进行比较的值为“1”,这会导致一个真实值,并因此返回所有行。 由于单引号被解释为文字字符串,因此您应该使用反标符号(`)来封装列名/表名,而不是单引号。 select start_hour from wp_t128customCalendarBookings WHERE `start_hour` < 1 The problem is that you've put single quotes ar ...
-
它不是以这种方式实现的 ,它是这样指定的 : 15.1.1全局对象的值属性 15.1.1.1 NaN NaN的值是NaN (见8.5)。 此属性具有属性{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}。 15.1.1.2 Infinity Infinity的值是+∞(见8.5)。 此属性具有属性{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}。 15 ...
-
Vim在Mingw上表现怪异(Vim behaving weirdly on Mingw)[2023-06-09]
事情是,退格往往是^H和删除往往^? - 和一些白痴终端交换两个或两个提供相同的字符。 当某些终端出现错误时,按键会产生ESC~, ESC会将vim置于命令模式,然后~将交换字符的情况,依此类推。 您还有终端功能的terminfo或termcap数据库以应对 - 如果您的TERM环境变量与运行的终端完全不匹配,将会选择错误的功能,并且应用程序将生成错误的转义序列以正确控制终奌站。 当然,在Windows上运行进一步复杂化的一切,因为终端不是平台的本地特性 - CMD.EXE做自己的事 ... -
路由表现奇怪(Routing behaving weirdly)[2021-08-23]
您的路线缺少行动: routeTemplate: "api/{controller}/{action}/{id}", 所以它认为{id}是XGetUsers 。 Your route is missing the action: routeTemplate: "api/{controller}/{action}/{id}", so it was thinking that {id} was XGetUsers. -
根据定义, NaN是具有未定义数值结果的操作的返回值。 除了作为全局对象的一部分,它还是Number对象的一部分: Number.NaN 。 这就是您看到您描述的行为的原因。 NaN是Number对象的一部分。 它仍然是一种数字数据类型,但未定义为实数。 By definition, NaN is the return value from operations which have an undefined numerical result. Aside from being part of the gl ...
-
你应该尝试使用jQuery的getScript ; 它处理你不想参与的所有混乱:添加async属性,定义readystatechange和load事件处理程序,避免内存泄漏,... 编辑: 至于你的根问题:如果你异步加载它,我认为你不能使这个脚本工作。 document.write本质上是同步的。 请参阅此相关问题: 警告:忽略从异步加载的外部脚本调用document.write()。 这是如何解决的? You should try using jQuery's getScript; it handles ...
-
您没有将任何参数传递给函数。 已声明a和b ,但未传递给该函数。 var num1 = prompt("How much money do you have?"); var num2 = prompt("How much money will you add?"); var a = parseInt(num1); var b = parseInt(num2); function addTwoNumbers(a,b) { return a + b; } alert("you will have " ...