Thanks, I notice that shortly after I switched over to the master build and 
the problem went away, however its back again on the master build.  Did you 
come up with a workaround - I build with Visual Studio 2015

John

On Thursday, August 25, 2016 at 7:01:00 AM UTC-4, [email protected] wrote:
>
> Hi there,
>
> I have the same problem. Link C++ library built from 1.0.0 tag by Visual 
> Studio project, show unresolved reference error to Channel and Server class
>
> After some research, I believe the problem is from conflicted name. 
> Project grpc++ have both channel.c and channel.cc source file (in different 
> directory), both compiled to channel.lib (in the same directory). so one 
> library overwrite another.
>
> Other conflicted names are byte_buffer.c/ byte_buffer.cc, 
> completion_queue.c/ completion_queue.cc, server.c/ server.cc
>
> John Coffey於 2016年8月22日星期一 UTC+8上午11時19分30秒寫道:
>>
>> Nicolas, I was able to work around the problem by simply switching to the 
>> master branch, looks like something is a bit off with the 1.0.0 tag release
>>
>> John
>>
>> On Sunday, August 21, 2016 at 3:04:27 PM UTC-4, John Coffey wrote:
>>>
>>> Nicolas, that was indeed the case when I switched from the 0_15_1 to the 
>>> v1.0.0 branch.  However today I changed to the 1.0.0 tag and the problems 
>>> are cropping up once more and this time despite clean builds I cannot seem 
>>> to resolve the linker issues.  I did a build from scratch and I get the 
>>> following missing symbol linker errors.  I would have thought that 
>>> grpc++.lib was the guilty library bit that does not look to be the case. 
>>>  Perhaps you can spot the problem.
>>>
>>> John
>>>
>>> 1>main.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to 
>>> '/OPT:LBR' specification
>>> 1>ca.lib(CADaemon.obj) : error LNK2019: unresolved external symbol 
>>> "public: virtual __cdecl grpc::Server::~Server(void)" 
>>> (??1Server@grpc@@UEAA@XZ) referenced in function "public: virtual void * 
>>> __cdecl grpc::Server::`scalar deleting destructor'(unsigned int)" 
>>> (??_GServer@grpc@@UEAAPEAXI@Z)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2001: unresolved external 
>>> symbol "public: virtual __cdecl grpc::Server::~Server(void)" 
>>> (??1Server@grpc@@UEAA@XZ)
>>> 1>ca.lib(CADaemon.obj) : error LNK2019: unresolved external symbol 
>>> "public: virtual void __cdecl grpc::Server::Wait(void)" 
>>> (?Wait@Server@grpc@@UEAAXXZ) referenced in function "private: void __cdecl 
>>> CADaemon::grpcService(class std::basic_string<char,struct 
>>> std::char_traits<char>,class std::allocator<char> > const &)" 
>>> (?grpcService@CADaemon@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: __cdecl grpc::Server::Server(class 
>>> grpc::ThreadPoolInterface *,bool,int,class grpc::ChannelArguments *)" 
>>> (??0Server@grpc@@AEAA@PEAVThreadPoolInterface@1@_NHPEAVChannelArguments@1@@Z)
>>>  
>>> referenced in function "public: class std::unique_ptr<class 
>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: virtual bool __cdecl grpc::Server::RegisterService(class 
>>> std::basic_string<char,struct std::char_traits<char>,class 
>>> std::allocator<char> > const *,class grpc::Service *)" 
>>> (?RegisterService@Server@grpc@@EEAA_NPEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVService@2@@Z)
>>>  
>>> referenced in function "public: class std::unique_ptr<class 
>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: virtual void __cdecl 
>>> grpc::Server::RegisterAsyncGenericService(class grpc::AsyncGenericService 
>>> *)" 
>>> (?RegisterAsyncGenericService@Server@grpc@@EEAAXPEAVAsyncGenericService@2@@Z)
>>>  
>>> referenced in function "public: class std::unique_ptr<class 
>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: virtual int __cdecl grpc::Server::AddListeningPort(class 
>>> std::basic_string<char,struct std::char_traits<char>,class 
>>> std::allocator<char> > const &,class grpc::ServerCredentials *)" 
>>> (?AddListeningPort@Server@grpc@@EEAAHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVServerCredentials@2@@Z)
>>>  
>>> referenced in function "public: class std::unique_ptr<class 
>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: virtual bool __cdecl grpc::Server::Start(class 
>>> grpc::ServerCompletionQueue * *,unsigned __int64)" 
>>> (?Start@Server@grpc@@EEAA_NPEAPEAVServerCompletionQueue@2@_K@Z) referenced 
>>> in function "public: class std::unique_ptr<class grpc::Server,struct 
>>> std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>> symbol "private: class grpc::ServerInitializer * __cdecl 
>>> grpc::Server::initializer(void)" 
>>> (?initializer@Server@grpc@@AEAAPEAVServerInitializer@2@XZ) referenced in 
>>> function "public: class std::unique_ptr<class grpc::Server,struct 
>>> std::default_delete<class grpc::Server> > __cdecl 
>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>> 1>grpc++.lib(create_channel_internal.obj) : error LNK2019: unresolved 
>>> external symbol "public: virtual __cdecl grpc::Channel::~Channel(void)" 
>>> (??1Channel@grpc@@UEAA@XZ) referenced in function "public: virtual void * 
>>> __cdecl grpc::Channel::`scalar deleting destructor'(unsigned int)" 
>>> (??_GChannel@grpc@@UEAAPEAXI@Z)
>>> 1>grpc++.lib(create_channel_internal.obj) : error LNK2019: unresolved 
>>> external symbol "private: __cdecl grpc::Channel::Channel(class 
>>> std::basic_string<char,struct std::char_traits<char>,class 
>>> std::allocator<char> > const &,struct grpc_channel *)" 
>>> (??0Channel@grpc@@AEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAUgrpc_channel@@@Z)
>>>  
>>> referenced in function "class std::shared_ptr<class grpc::Channel> __cdecl 
>>> grpc::CreateChannelInternal(class std::basic_string<char,struct 
>>> std::char_traits<char>,class std::allocator<char> > const &,struct 
>>> grpc_channel *)" 
>>> (?CreateChannelInternal@grpc@@YA?AV?$shared_ptr@VChannel@grpc@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@PEAUgrpc_channel@@@Z)
>>> 1>C:\Users\johnc\main\dlmu\cadaemon-0339.1\win32\cadaemon\x64\Debug\cadaemon.exe
>>>  
>>> : fatal error LNK1120: 10 unresolved externals
>>>
>>>
>>>
>>> On Tuesday, July 12, 2016 at 7:02:45 PM UTC-4, Nicolas Noble wrote:
>>>>
>>>> Not really - these are fairly standard symbols, and shouldn't go 
>>>> missing. I can't help but notice that you are building from an existing 
>>>> build though. Did you, well, try cleaning all and rebuilding all ? If 
>>>> their 
>>>> signature changed between the builds, and your VS didn't pick up the 
>>>> change 
>>>> and rebuild the necessary parts, that'd do it.
>>>>
>>>> On Monday, July 11, 2016 at 12:47:33 PM UTC-7, John Coffey wrote:
>>>>>
>>>>> I'm getting the following linker errors recently (master branch) on 
>>>>> windows, I do not get these in release-0_15_1.  I wonder if anyone could 
>>>>> shed light on what the source of this error might be. I suspect that it 
>>>>> has 
>>>>> something to do with the libraries that I am linking with 
>>>>> post  release-0_15_1 (I did not change these but I did notice that a new 
>>>>> grpc++reflection.lib was added.
>>>>>
>>>>> I am linking to the following grpc/protocol buffer libraries
>>>>>
>>>>> libprotobufd.lib
>>>>> gpr.lib
>>>>> grpc.lib
>>>>> grpc_unsecure.lib
>>>>> grpc++.lib
>>>>> grpc++_unsecure.lib
>>>>> z.lib
>>>>>
>>>>> Any ideas
>>>>>
>>>>> John
>>>>>
>>>>> These are the linker errors on in my client
>>>>>
>>>>> 1>  LINK : C:\main\dlmu\cacli-0339.1\win32\cacli\x64\Debug\cacli.exe 
>>>>> not found or not built by the last incremental link; performing full link
>>>>> 1>grpc++_unsecure.lib(insecure_credentials.obj) : error LNK2019: 
>>>>> unresolved external symbol "public: __cdecl 
>>>>> grpc::ChannelCredentials::ChannelCredentials(void)" 
>>>>> (??0ChannelCredentials@grpc@@QEAA@XZ) referenced in function "public: 
>>>>> __cdecl grpc::`anonymous 
>>>>> namespace'::InsecureChannelCredentialsImpl::InsecureChannelCredentialsImpl(void)"
>>>>>  
>>>>> (??0InsecureChannelCredentialsImpl@?A0x568c5687@grpc@@QEAA@XZ)
>>>>> 1>grpc++_unsecure.lib(insecure_credentials.obj) : error LNK2019: 
>>>>> unresolved external symbol "public: virtual __cdecl 
>>>>> grpc::ChannelCredentials::~ChannelCredentials(void)" 
>>>>> (??1ChannelCredentials@grpc@@UEAA@XZ) referenced in function "public: 
>>>>> virtual __cdecl grpc::`anonymous 
>>>>> namespace'::InsecureChannelCredentialsImpl::~InsecureChannelCredentialsImpl(void)"
>>>>>  
>>>>> (??1InsecureChannelCredentialsImpl@?A0x568c5687@grpc@@UEAA@XZ)
>>>>> 1>grpc++_unsecure.lib(create_channel_internal.obj) : error LNK2019: 
>>>>> unresolved external symbol "public: virtual __cdecl 
>>>>> grpc::Channel::~Channel(void)" (??1Channel@grpc@@UEAA@XZ) referenced in 
>>>>> function "public: virtual void * __cdecl grpc::Channel::`scalar deleting 
>>>>> destructor'(unsigned int)" (??_GChannel@grpc@@UEAAPEAXI@Z)
>>>>> 1>grpc++_unsecure.lib(create_channel_internal.obj) : error LNK2019: 
>>>>> unresolved external symbol "private: __cdecl grpc::Channel::Channel(class 
>>>>> std::basic_string<char,struct std::char_traits<char>,class 
>>>>> std::allocator<char> > const &,struct grpc_channel *)" 
>>>>> (??0Channel@grpc@@AEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAUgrpc_channel@@@Z)
>>>>>  
>>>>> referenced in function "class std::shared_ptr<class grpc::Channel> 
>>>>> __cdecl 
>>>>> grpc::CreateChannelInternal(class std::basic_string<char,struct 
>>>>> std::char_traits<char>,class std::allocator<char> > const &,struct 
>>>>> grpc_channel *)" 
>>>>> (?CreateChannelInternal@grpc@@YA?AV?$shared_ptr@VChannel@grpc@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@PEAUgrpc_channel@@@Z)
>>>>> 1>C:\main\dlmu\cacli-0339.1\win32\cacli\x64\Debug\cacli.exe : fatal 
>>>>> error LNK1120: 4 unresolved externals
>>>>>
>>>>>
>>>>>
>>>>> These are the linker errors on in my server
>>>>>
>>>>> 1>------ Build started: Project: cadaemon, Configuration: Debug x64 
>>>>> ------
>>>>> 1>main.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to 
>>>>> '/OPT:LBR' specification
>>>>> 1>ca.lib(CADaemon.obj) : error LNK2019: unresolved external symbol 
>>>>> "public: virtual __cdecl grpc::Server::~Server(void)" 
>>>>> (??1Server@grpc@@UEAA@XZ) referenced in function "public: virtual void * 
>>>>> __cdecl grpc::Server::`scalar deleting destructor'(unsigned int)" 
>>>>> (??_GServer@grpc@@UEAAPEAXI@Z)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2001: unresolved external 
>>>>> symbol "public: virtual __cdecl grpc::Server::~Server(void)" 
>>>>> (??1Server@grpc@@UEAA@XZ)
>>>>> 1>ca.lib(CADaemon.obj) : error LNK2019: unresolved external symbol 
>>>>> "public: virtual void __cdecl grpc::Server::Wait(void)" 
>>>>> (?Wait@Server@grpc@@UEAAXXZ) referenced in function "private: void 
>>>>> __cdecl 
>>>>> CADaemon::grpcService(class std::basic_string<char,struct 
>>>>> std::char_traits<char>,class std::allocator<char> > const &)" 
>>>>> (?grpcService@CADaemon@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
>>>>> 1>grpc++.lib(insecure_credentials.obj) : error LNK2019: unresolved 
>>>>> external symbol "public: __cdecl 
>>>>> grpc::ChannelCredentials::ChannelCredentials(void)" 
>>>>> (??0ChannelCredentials@grpc@@QEAA@XZ) referenced in function "public: 
>>>>> __cdecl grpc::`anonymous 
>>>>> namespace'::InsecureChannelCredentialsImpl::InsecureChannelCredentialsImpl(void)"
>>>>>  
>>>>> (??0InsecureChannelCredentialsImpl@?A0x568c5687@grpc@@QEAA@XZ)
>>>>> 1>grpc++.lib(insecure_credentials.obj) : error LNK2019: unresolved 
>>>>> external symbol "public: virtual __cdecl 
>>>>> grpc::ChannelCredentials::~ChannelCredentials(void)" 
>>>>> (??1ChannelCredentials@grpc@@UEAA@XZ) referenced in function "public: 
>>>>> virtual __cdecl grpc::`anonymous 
>>>>> namespace'::InsecureChannelCredentialsImpl::~InsecureChannelCredentialsImpl(void)"
>>>>>  
>>>>> (??1InsecureChannelCredentialsImpl@?A0x568c5687@grpc@@UEAA@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: __cdecl grpc::Server::Server(class 
>>>>> grpc::ThreadPoolInterface *,bool,int,class grpc::ChannelArguments *)" 
>>>>> (??0Server@grpc@@AEAA@PEAVThreadPoolInterface@1@_NHPEAVChannelArguments@1@@Z)
>>>>>  
>>>>> referenced in function "public: class std::unique_ptr<class 
>>>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: virtual bool __cdecl grpc::Server::RegisterService(class 
>>>>> std::basic_string<char,struct std::char_traits<char>,class 
>>>>> std::allocator<char> > const *,class grpc::Service *)" 
>>>>> (?RegisterService@Server@grpc@@EEAA_NPEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVService@2@@Z)
>>>>>  
>>>>> referenced in function "public: class std::unique_ptr<class 
>>>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: virtual void __cdecl 
>>>>> grpc::Server::RegisterAsyncGenericService(class grpc::AsyncGenericService 
>>>>> *)" 
>>>>> (?RegisterAsyncGenericService@Server@grpc@@EEAAXPEAVAsyncGenericService@2@@Z)
>>>>>  
>>>>> referenced in function "public: class std::unique_ptr<class 
>>>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: virtual int __cdecl grpc::Server::AddListeningPort(class 
>>>>> std::basic_string<char,struct std::char_traits<char>,class 
>>>>> std::allocator<char> > const &,class grpc::ServerCredentials *)" 
>>>>> (?AddListeningPort@Server@grpc@@EEAAHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVServerCredentials@2@@Z)
>>>>>  
>>>>> referenced in function "public: class std::unique_ptr<class 
>>>>> grpc::Server,struct std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: virtual bool __cdecl grpc::Server::Start(class 
>>>>> grpc::ServerCompletionQueue * *,unsigned __int64)" 
>>>>> (?Start@Server@grpc@@EEAA_NPEAPEAVServerCompletionQueue@2@_K@Z) 
>>>>> referenced 
>>>>> in function "public: class std::unique_ptr<class grpc::Server,struct 
>>>>> std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(server_builder.obj) : error LNK2019: unresolved external 
>>>>> symbol "private: class grpc::ServerInitializer * __cdecl 
>>>>> grpc::Server::initializer(void)" 
>>>>> (?initializer@Server@grpc@@AEAAPEAVServerInitializer@2@XZ) referenced in 
>>>>> function "public: class std::unique_ptr<class grpc::Server,struct 
>>>>> std::default_delete<class grpc::Server> > __cdecl 
>>>>> grpc::ServerBuilder::BuildAndStart(void)" 
>>>>> (?BuildAndStart@ServerBuilder@grpc@@QEAA?AV?$unique_ptr@VServer@grpc@@U?$default_delete@VServer@grpc@@@std@@@std@@XZ)
>>>>> 1>grpc++.lib(create_channel_internal.obj) : error LNK2019: unresolved 
>>>>> external symbol "public: virtual __cdecl grpc::Channel::~Channel(void)" 
>>>>> (??1Channel@grpc@@UEAA@XZ) referenced in function "public: virtual void * 
>>>>> __cdecl grpc::Channel::`scalar deleting destructor'(unsigned int)" 
>>>>> (??_GChannel@grpc@@UEAAPEAXI@Z)
>>>>> 1>grpc++.lib(create_channel_internal.obj) : error LNK2019: unresolved 
>>>>> external symbol "private: __cdecl grpc::Channel::Channel(class 
>>>>> std::basic_string<char,struct std::char_traits<char>,class 
>>>>> std::allocator<char> > const &,struct grpc_channel *)" 
>>>>> (??0Channel@grpc@@AEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAUgrpc_channel@@@Z)
>>>>>  
>>>>> referenced in function "class std::shared_ptr<class grpc::Channel> 
>>>>> __cdecl 
>>>>> grpc::CreateChannelInternal(class std::basic_string<char,struct 
>>>>> std::char_traits<char>,class std::allocator<char> > const &,struct 
>>>>> grpc_channel *)" 
>>>>> (?CreateChannelInternal@grpc@@YA?AV?$shared_ptr@VChannel@grpc@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@PEAUgrpc_channel@@@Z)
>>>>> 1>C:\main\dlmu\cadaemon-0339.1\win32\cadaemon\x64\Debug\cadaemon.exe : 
>>>>> fatal error LNK1120: 12 unresolved externals
>>>>> ========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped 
>>>>> ==========
>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/5611e5e8-2437-4fc4-a965-4a1ef1d6992f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to