Обычно цель InlineData - использовать ту же логику тестирования, но изолировать различия в ожидаемых входах и выходах.
[Theory]
[InlineData(1, 10.00m)]
[InlineData(2, 14.50m)]
public void Test1(int movieId, decimal expectedPrice)
{
var result = db.movieTable.Single(p => p.Id == movieId);
Assert.True(result.Price == expectedPrice);
}
Это - полностью неправильный способ обработать это.
У любого подключенного к Интернету будет некоторый "законный" сервер SMTP доступным им для взятия представления электронной почты - ISP, офис, и т.д.
Вы ХОТИТЕ усилить, потому что они делают несколько вещей для Вас.
1) они берут Ваше сообщение и обязанность обработать то сообщение. После высаживания его это больше не проблема.
2) Любые почтовые технологии de-спама обрабатываются сервером. Еще лучше, когда/если те технологии изменяются (Доменные ключи кто-либо?), сервер обрабатывает его, не Ваш код.
3) Вы, как клиент той передающей почтовой системы, уже имеют любые учетные данные, необходимо говорить с тем сервером. Основные серверы SMTP заблокированы вниз через аутентификацию, диапазон IP, и т.д.
4) Вы не изобретаете велосипед. Усильте инфраструктуру, которую Вы имеете. Вы пишете приложение или почтовый сервер? Установка почтового сервера является каждой дневной задачей, которая обычно проста сделать. Всем тем случайным "немым" пользователям в Интернете удалось разбудить почтовый набор.
Не делать.
Отправка электронного письма намного более сложна, чем это кажется. Excel почтовых серверов в (или должен выделиться в), надежная доставка.
Настройте отдельный почтовый сервер, если Вам нужно к - который будет по существу тем же как реализацией той в Java (я сомневаюсь, что Вы найдете библиотеки для этой задачи - они были бы чрезвычайно полными почтовыми серверами), но намного более более простой.
Одно возможное решение: получите запись MX самостоятельно и используйте JavaMail API.
Можно получить запись MX использование dnsjava проекта:
Зависимость Maven2:
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.0.1</version>
</dependency>
Метод для MX записывает извлечение:
public static String getMXRecordsForEmailAddress(String eMailAddress) {
String returnValue = null;
try {
String hostName = getHostNameFromEmailAddress(eMailAddress);
Record[] records = new Lookup(hostName, Type.MX).run();
if (records == null) { throw new RuntimeException("No MX records found for domain " + hostName + "."); }
if (log.isTraceEnabled()) {
// log found entries for debugging purposes
for (int i = 0; i < records.length; i++) {
MXRecord mx = (MXRecord) records[i];
String targetString = mx.getTarget().toString();
log.trace("MX-Record for '" + hostName + "':" + targetString);
}
}
// return first entry (not the best solution)
if (records.length > 0) {
MXRecord mx = (MXRecord) records[0];
returnValue = mx.getTarget().toString();
}
} catch (TextParseException e) {
throw new RuntimeException(e);
}
if (log.isTraceEnabled()) {
log.trace("Using: " + returnValue);
}
return returnValue;
}
private static String getHostNameFromEmailAddress(String mailAddress) throws TextParseException {
String parts[] = mailAddress.split("@");
if (parts.length != 2) throw new TextParseException("Cannot parse E-Mail-Address: '" + mailAddress + "'");
return parts[1];
}
Отправка почты с помощью кода JavaMail:
public static void sendMail(String toAddress, String fromAddress, String subject, String body) throws AddressException, MessagingException {
String smtpServer = getMXRecordsForEmailAddress(toAddress);
// create session
Properties props = new Properties();
props.put("mail.smtp.host", smtpServer);
Session session = Session.getDefaultInstance(props);
// create message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(fromAddress));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress));
msg.setSubject(subject);
msg.setText(body);
// send message
Transport.send(msg);
}