Вы можете почти получить то, что вы хотите, используя strsplit
, разделив y
на x
df1 <- cbind(df[1], do.call("rbind", strsplit(df$y, df$x)))
df1
# x 1 2
#1 1a abc 39d
#2 2b abc 32i
#3 3c ad ab 32a 32
#4 9d ab acb 2d
#5 N/A abc 329d abc 329d
Для случаев «N / A», поскольку он всегда будет состоять из двух частей, мы можем разделить его на пробел и заменить их в определенных индексах.
inds <- df$x == "N/A"
df1[inds, 2:3] <- do.call("rbind", strsplit(df$y[inds], "\\s+"))
df1
# x 1 2
#1 1a abc 329d
#2 2b 329d abc
#3 3c abc 329d
#4 9d 329d abc
#5 N/A abc 329d
- Обновление: проблема с аутентификацией.
Хорошо, вот то, что я обнаружил, продолжался. При получении электронного письма код выше правильно настраивает аутентификацию и Authenticator.getPasswordAuthentication (), обратный вызов на самом деле вызывается.
Не, итак, при посылании электронного письма. Необходимо сделать немного больше. Добавьте это:
// Setup mail server
props.put("mail.smtp.host", m_sending_host);
props.put("mail.smtp.auth", "true");
который вынудит javax.mail API сделать аутентификацию входа в систему. И затем используйте фактический Транспортный экземпляр вместо статического .send () метод:
Transport t = session.getTransport(m_sending_protocol);
t.connect(m_sending_user, m_sending_pass);
...
// Send message
try {
t.sendMessage(message, message.getAllRecipients());
} catch (Exception e){
Не вызывая аутентификацию, почтовый сервер рассматривал меня как несанкционированное реле и просто завершил работу меня. Различие между адресами, которые "работали" и адреса, которые не сделали, было то, что те, которые "работали", были все локальны для почтового сервера. Поэтому это просто приняло их. Но для любых нелокальных "релейных" адресов, это отклонило бы сообщение, потому что моя информация аутентификации не была представлена javax.mail API, когда я думал, что это будет иметь.
Спасибо за подсказки, чтобы предложить мне смотреть на сторону почтового сервера вещей также.
Я изменил бы вызов на InternetAddress, чтобы использовать "строгую" интерпретацию и видеть, получаете ли Вы дальнейшие ошибки на адресах, Вы испытываете затруднения из-за.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(vcea.get(i).emailaddr, true ));
// ^^^^ turns on strict interpretation
Javadoc для конструктора InternetAddress
Если это перестанет работать, то это бросит AddressException
которому назвали метод getPos()
который возвращает положение отказа (Javadoc)
Это кажется мне как проблема, которая произошла на моей работе. Если код, который Вы показываете, параллелен, то использование непосредственно System.getProperties мог быть проблемой, потому что значение хоста, Вы ставите их, может быть перезаписано следующим запросом, все еще сохраняя пользователя и пароль от перезаписанного хоста.
В нашем случае мы решили то использование клона System.getProperties () хеш-таблица.
Надежда, которая помогает (эту проблему было действительно трудно отследить).
Попробуйте это:
String to="stackoverflow@so.com";
String cc="one@mail.com,two@mail.com"; //The separator ',' works good
message.setRecipients(Message.RecipientType.TO,new InternetAddress[] {
new InternetAddress(to) }); // This is only one mail
InternetAddress[] addr = parseAddressList(cc); //Here add all the rest of the mails
message.setRecipients(Message.RecipientType.CC,addr);
Извините за мой английский язык. Это не хорошо.